Jump to: navigation, search

Difference between revisions of "EclipseLink/Examples/DBWS/DBWSBasicStoredProcedure"

(DBWS Example: Web Service based on a Stored Procedure)
Line 1: Line 1:
 
== DBWS Example: Web Service based on a Stored Procedure==
 
== DBWS Example: Web Service based on a Stored Procedure==
  
Given a procedure name (patterns supported as 1.2.1.1), a Web Service is automatically generated that exposes the Stored Procedure(s) operation(s).
+
Given a procedure name, a Web Service is automatically generated that exposes the Stored Procedure(s) operation(s).
For the Oracle DB platform, the catalogName can be used to identify the PL/SQL package in which a Stored Procedure is located.
+
  
 
Note: From the metadata for a Stored Procedure, it is not possible to determine the structure of the returned data. Therefore, a simplified 'pseudo-rowset' schema is used.
 
Note: From the metadata for a Stored Procedure, it is not possible to determine the structure of the returned data. Therefore, a simplified 'pseudo-rowset' schema is used.
Line 21: Line 20:
 
</div>
 
</div>
  
The EclipseLink DBWS runtime produces an XML document-fragment that is simple and 'human-readable'; however, the document is 'dumb' as it cannot be validated against any XML .xsd schema (elements underneath <srvc:result> are not namespace-qualified).
+
The EclipseLink DBWS runtime produces an XML document-fragment that is simple and 'human-readable'; however, the document is 'dumb' as it cannot be validated against any XML schema (elements underneath <srvc:result> are not namespace-qualified).
  
 
Element tag names are direct copies of table's column names
 
Element tag names are direct copies of table's column names

Revision as of 13:56, 11 March 2009

DBWS Example: Web Service based on a Stored Procedure

Given a procedure name, a Web Service is automatically generated that exposes the Stored Procedure(s) operation(s).

Note: From the metadata for a Stored Procedure, it is not possible to determine the structure of the returned data. Therefore, a simplified 'pseudo-rowset' schema is used.

XSD for Simple XML Format

 <?xml version="1.0" encoding="UTF-8"?>
 <xsd:schema
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 >
 <xsd:complexType name="sxfType">
   <xsd:sequence>
     <xsd:any minOccurs="0"/>
   </xsd:sequence>
 </xsd:complexType>
 <xsd:element name="simple-xml-format" type="sxfType"/>
 </xsd:schema>

The EclipseLink DBWS runtime produces an XML document-fragment that is simple and 'human-readable'; however, the document is 'dumb' as it cannot be validated against any XML schema (elements underneath <srvc:result> are not namespace-qualified).

Element tag names are direct copies of table's column names

Resulting XML Document

<env:Envelope
 xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
 <srvc:findAllEmployeesResponse
   xmlns:srvc="urn:empService">
  <srvc:result>
   <simple-xml-format>
    <simple-xml>
     <EMPNO>7499</EMPNO>
     <ENAME>ALLEN</ENAME>
     <JOB>SALESMAN</JOB>
     <MGR>7698</MGR>
     <HIREDATE>1981-02-20T00:00:00.0</HIREDATE>
     <SAL>1600</SAL>
     <COMM>300</COMM>
     <DEPTNO>30</DEPTNO>
    </simple-xml>
    . . .
    <simple-xml>
     <EMPNO>7844</EMPNO>
     <ENAME>TURNER</ENAME>
     <JOB>SALESMAN</JOB>
     <MGR>7698</MGR>
     <HIREDATE>1981-09-08T00:00:00.0</HIREDATE>
     <SAL>1500</SAL>
     <COMM>0</COMM>
     <DEPTNO>30</DEPTNO>
    </simple-xml>
   </simple-xml-format>
  </srvc:result>
 </srvc:findAllEmployeesResponse>
</env:Body>
</env:Envelope>

NB: The element-tags <simple-xml-format> and <simple-xml> can be customized:

<env:Envelope
 xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
 <env:Header/>
 <env:Body>
   <srvc:employeesWithCommissionResponse
     xmlns:srvc="urn:empService">
     <srvc:result>
       <employee-list
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:type="any">
         <employee>
           <EMPNO>7499</EMPNO>
           <ENAME>ALLEN</ENAME>
           <JOB>SALESMAN</JOB>
           <MGR>7698</MGR>
           <HIREDATE>1981-02-20T00:00:00.0</HIREDATE>
           <SAL>1600</SAL>
           <COMM>300</COMM>
           <DEPTNO>30</DEPTNO>
         </employee>
         . . .
         <employee>
           <EMPNO>7844</EMPNO>
           <ENAME>TURNER</ENAME>
           <JOB>SALESMAN</JOB>
           <MGR>7698</MGR>
           <HIREDATE>1981-09-08T00:00:00.0</HIREDATE>
           <SAL>1500</SAL>
           <COMM>0</COMM>
           <DEPTNO>30</DEPTNO>
         </employee>
       </employee-list>
     </srvc:result>
   </srvc:employeesWithCommissionResponse>
 </env:Body>
</env:Envelope>

Any combination of IN, OUT and IN OUT arguments are supported; in addition, procedures in packages that are overloaded - same name, different parameters – are supported.