XDB Native Web Services - Collection of object types
Hello,
my DB 11g (11.1.0.6.0) is enabled to use XDB Native Web Services, everything works as it should. I already use it successfully to publish a web service with object types as OUT parameter. They are created as complex types in the XML response as described here: [http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28369/xdb_web_services.htm#CHDGBFID]
But what I need is a collection of these object types, e.g.
I have a type FLIGHT with some information elements (departure, arrival, date, time, price) and I have a web service function GET_AVAILABILITY with parameters departure, arrival and date. What I want is to return a collection of FLIGHT objects, it could be none, one or many flights for a request.
For the moment I create another object type which contains a fix number of FLIGHT objects to work around the collection issue:
create flight_tab_typ as object (
fl1 flight_typ
,fl2 flight_typ
,fl3 flight_typ
I tried to build a PL/SQL table of object type and also a VARRAY of object type but for both the WSDL of the web service cannot be build up correctly in the web browser. For me it seems that this is not supported by the Native Web Services.
I know I can build up my own XMLTYPE with XML structure as OUT parameter but to use object types is much easier and it builds up the XML structure automatically.
Does anybody know how to use collections (VARRAY or PL/SQL Tables) with the Native XML DB Web Services?
Thanks,
Andreas
Hi flea,
I use complex types with XDB native webservices. Here is an example. Using people/groups objects. I haven't compiled this so there may be some typos etc, but it should give you the idea.
Beware!I have had problems with the created WSDL file in that it doesn't always include the namespace from all types. In many client packages ( JDevloper , SOAPUI etc) this causes a wsdl import failure.
You can add the missing namespace by hand a load the WSDL file locally and then it should work. I haven't raised an SR with Oracle about this yet.
Assume you create the following under SCoTT schema on machine host.com on port 8080.
The webservice[WSDL] will be available from
http://host.com:8080/orawsv/SCOTT/WEBSERVCIES/GET_GROUP[?wsdl]
For other peoples sanity it took me a little while to realise the WSDL url is case specific. E.g. the schema, package and functions have to be UPPER case.
create table people_groups_tab (group_name varchar2(40 char),first_name varchar2(40 char),last_name varchar2(40 char))
insert into people_groups_tab values ('FINANCE','Joe','Bloggs')
insert into people_groups_tab values ('FINANCE','Bob','Jones')
insert into people_groups_tab values ('IT','Alan','Andrews')
create or replace type person_obj
as object
first_name people_groups_tab.first_name%type
,last_name people_groups_tab.last_name%type
create or replace type people_obj
as table of person_obj
create or replace type people_groups_obj
as object
group_name varchar2(40 char)
people people_obj
create or replace package webservices
as
function get_group
p_group_name varchar2
) return people_groups_obj;
end;
create or replace package body webservices
as
function get_group
p_group_name varchar2
) return people_groups_obj
as
l_group people_groups_obj;
l_people people_obj;
begin
select person_obj
first_name
,last_name
bulk collect into l_people
from people_groups_tab
where group_name p_group_name;
l_group := people_groups_obj(p_group_name,l_people);
return l_group;
end;
end;
/
Similar Messages
-
11G - XDB Native Web Services - how to create a web service proxy
Hi,
I am working on XDB Native web Services (http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28369/xdb_web_services.htm#CHDDBCHB). I want to create a proxy web service for orawsv service (http://server:port/orawsv?wsdl), which is protected by an user/password
In Jdeveloper 10133:
+ copy orawsv wsdl (http://server:port/orawsv?wsdl) in local file
+ create a proxy web service form the local wsdl (from the wizard)
+ implement the client (http://www.oracle.com/technology/obe/11gr1_db/datamgmt/xmldb2_b/xmldb2_b.htm)
==> OK
In Jdeveloper 11g
+ copy orawsv wsdl (http://server:port/orawsv?wsdl) in local file
+ create a proxy web service form the local wsdl (from the wizard)
+ how to implement the client : there is no method to set a password
any ideas?
Thanks for your help,
Cyryl
Edited by: cbalmati on Oct 21, 2008 6:26 AMI'm working on getting a proxy web service working in 11g and the contents of this thread is close to answering my question.
The web service proxy is accessing a service that requires a SOAP Security header.
In looking at the previous post, I thought that by using the BindingProvider API I could add the security settings. But when I invoke the proxy I consistently get the following error response from the (PeopleSoft) web service: "com.sun.xml.ws.client.ClientTransportException: request requires HTTP authentication: Unauthorized'
In contrast to that error, when I use JDeveloper's HTTP Analyzer, I get a successful response from the web service. Below is what the raw HTTP looks like:
POST https://isiswebdev.services.wisc.edu:7002/PSIGW/PeopleSoftServiceListeningConnector HTTP/1.1
Content-Type: text/xml; charset=UTF-8
Host: isiswebdev.services.wisc.edu:7002
SOAPAction: "CI_U_FA_CSA_STDTA_CI_G.V2"
Content-Length: 548
X-HTTPAnalyzer-Rules: 1
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:ns2="http://xmlns.oracle.com/Enterprise/Tools/schemas/M183895.V1">
<env:Header>
<ns1:Security>
<ns1:UsernameToken>
<ns1:Username>UserName</ns1:Username>
<ns1:Password>XXXXXXX</ns1:Password>
</ns1:UsernameToken>
</ns1:Security>
</env:Header>
<env:Body>
<ns2:Get__CompIntfc__U_FA_CSA_STDTA_CI>
<ns2:EMPLID>012345678912</ns2:EMPLID>
</ns2:Get__CompIntfc__U_FA_CSA_STDTA_CI>
</env:Body>
</env:Envelope>
Here's the Java code that I'm using to try to make the same call:
public void callIWebservice(String emplId){
cSA_STDNT_DATA = new CSA_STDNT_DATA();
CI_U_FA_CSA_STDTA_CI_PortType port = cSA_STDNT_DATA.getCI_U_FA_CSA_STDTA_CI_Port();
Map<String, Object> requestContext = ((BindingProvider)port).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, "UserName");
requestContext.put(BindingProvider.PASSWORD_PROPERTY,"XXXXXXX");
GetCompIntfcUFACSASTDTACITypeShape CiType = new GetCompIntfcUFACSASTDTACITypeShape();
EMPLIDTypeShape emplIDType = new EMPLIDTypeShape();
emplIDType.setValue(emplId);
CiType.setEMPLID(emplIDType);
try {
GetCompIntfcUFACSASTDTACIResponseTypeShape response = port.getDATA(CiType);
System.out.println(response.getCUMGPA());
} catch (M464939V1 e) {
System.out.println(e.getFaultInfo());
But, alas, I just get the ClientTransportException.
Is the Bindingprovider interface the correct way to add the soap security headers? Or am I following the wrong path?
Any help will be greatly appreciated. -
Native Web Services and Collection of Records
Hi
I want to use XMLDB Native Web Services but one of my requirements is for the web service to pass in to Oracle a collection of records as a input parameter to the stored procedure.
What is the best way to achieve this with Native Web Services ? A couple of options I can think of below, are there any others ?
1. Create a stored procedure with an IN parameter defined as CLOB or XMLTYPE (which is best, does DBNWS work with XMLTYPE ?) and structure the XSD/XML to contain the required record structure. See below
CREATE OR REPLACE PROCEDURE test_using_xml (
p_xmlin IN XMLTYPE,
p_xmlout OUT XMLTYPE) AS
BEGIN
BLAH, BLAH, BLAH;
END;
2. Define TYPES as below
CREATE OR REPLACE TYPE MEMBER_REC AS OBJECT
(FIRST_NAME VARCHAR2(10),
LAST_NAME VARCHAR2(10));
CREATE OR REPLACE TYPE MEMBER_TAB AS TABLE OF MEMBER_REC;
CREATE OR REPLACE TYPE MEMBER_TAB_OBJ AS OBJECT (DUMMY MEMBER_TAB);
CREATE OR REPLACE PROCEDURE get_quote (
p_members IN MEMBER_TAB_OBJ) AS
BEGIN
NULL;
END;
ThanksThis is what we ended up using, creating complex object types. Seems to work quite well. The object also is effective your SOA Contract which is quite nice.
The generated WSDL is reasonably straight forward and logical apart from a few naming quirks.
CREATE OR REPLACE TYPE MEMBER_REC_IN AS OBJECT
(PERSON_NUMBER CHAR(2),
RELATIONSHIP_CODE CHAR(1),
FIRST_NAME VARCHAR2(10),
LAST_NAME VARCHAR2(10),
GENDER CHAR(1),
DATE_OF_BIRTH DATE);
CREATE OR REPLACE TYPE MEMBER_REC_OUT AS OBJECT
(PERSON_NUMBER CHAR(2),
API NUMBER);
CREATE OR REPLACE TYPE MEMBER_TAB_IN AS TABLE OF MEMBER_REC_IN;
CREATE OR REPLACE TYPE MEMBER_TAB_OUT AS TABLE OF MEMBER_REC_OUT;
CREATE OR REPLACE TYPE GET_QUOTE_SUBMIT_OBJ AS OBJECT (MESSAGE_GUID VARCHAR2(2000),
EFFECTIVE_DATE DATE,
PRODUCT_CODE VARCHAR2(12),
GROUP_ID VARCHAR2(12),
ADDRESS_LINE1 VARCHAR2(50),
ADDRESS_LINE2 VARCHAR2(50),
CITY VARCHAR2(50),
COUNTRY VARCHAR2(50),
POSTCODE VARCHAR2(10),
FAMILY MEMBER_TAB_IN);
CREATE OR REPLACE TYPE GET_QUOTE_RESPONSE_OBJ AS OBJECT (MESSAGE_GUID VARCHAR2(2000),
QUOTE_NUMBER NUMBER,
API NUMBER,
FAMILY MEMBER_TAB_OUT,
RESULT_CODE NUMBER,
RESULT_DESCRIPTION VARCHAR2(2000));
CREATE OR REPLACE PROCEDURE get_quote (
p_quote_in IN GET_QUOTE_SUBMIT_OBJ,
p_quote_out OUT GET_QUOTE_RESPONSE_OBJ) AS
BEGIN
-- Initiliase the record
p_quote_out := GET_QUOTE_RESPONSE_OBJ(NULL,NULL,NULL,MEMBER_TAB_OUT(),NULL,NULL);
p_quote_out.message_guid := p_quote_in.message_guid;
p_quote_out.quote_number := 123456;
p_quote_out.api := 999.99;
-- Loop thru the members passed in
FOR idx IN 1..p_quote_in.family.count LOOP
-- Extend the array
p_quote_out.family.EXTEND(1);
-- Initiliase the record
p_quote_out.family(idx) := MEMBER_REC_OUT(NULL,NULL);
p_quote_out.family(idx).person_number := p_quote_in.family(idx).person_number;
p_quote_out.family(idx).api := idx * 100;
END LOOP;
p_quote_out.result_code := 0;
p_quote_out.result_description := 'test';
END;
/ -
11g Native Web Services Core Dump ( qmuwsPrintPackWSDL() )
I know that native PL/SQL web services are newer functionality, but I have not been able to find any information on the following issue on MetaLink or here on the forums. When creating 11g native web services when attempting to retrieve the WSDL documents from the server the document is only partially served (estimated at about 2/3rds) or not at all (blank document returned).
Banner: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
The alert log gains this entry:
<msg time='2009-03-30T13:23:21.843-04:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='TEST_HOST1' host_addr='10.38.11.20' module=''
pid='16144'>
<txt>Exception [type: ACCESS_VIOLATION, UNABLE_TO_READ] [ADDR:0x98] [PC:0x37FAE2B, _qmuwsPrintPackWSDL()+1031]
</txt>
</msg>
<msg time='2009-03-30T13:23:21.906-04:00' org_id='oracle' comp_id='rdbms'
msg_id='1205222838' type='INCIDENT_ERROR' group='Access Violation'
level='1' host_id='TEST_HOST1' host_addr='10.38.11.20'
prob_key='ORA 7445 [qmuwsPrintPackWSDL()+1031]' upstream_comp='' downstream_comp=''
ecid='' errid='62733' detail_path='c:\app\diag\rdbms\orcl\orcl\trace\orcl_s001_16144.trc'>
<txt>Errors in file c:\app\diag\rdbms\orcl\orcl\trace\orcl_s001_16144.trc (incident=62733):
ORA-07445: exception encountered: core dump [qmuwsPrintPackWSDL()+1031] [ACCESS_VIOLATION] [ADDR:0x98] [PC:0x37FAE2B] [UNABLE_TO_READ] []
</txt>
</msg>
<msg time='2009-03-30T13:23:21.953-04:00' org_id='oracle' comp_id='rdbms'
msg_id='dbgexProcessError:1094:3370026720' type='TRACE' level='16'
host_id='TEST_HOST1' host_addr='10.38.11.20'>
<txt>Incident details in: c:\app\diag\rdbms\orcl\orcl\incident\incdir_62733\orcl_s001_16144_i62733.trc
</txt>
</msg>
<msg time='2009-03-30T13:23:23.250-04:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='TEST_HOST1' host_addr='10.38.11.20' module=''
pid='3120'>
<txt>Trace dumping is performing id=[cdmp_20090330132323]
</txt>
</msg>
<msg time='2009-03-30T13:23:26.093-04:00' org_id='oracle' comp_id='rdbms'
msg_id='dbgrimswi_sweep_incident:1855:4220681759' type='ERROR' group='ami_comp'
level='8' host_id='TEST_HOST1' host_addr='10.38.11.20'>
<txt>Sweep Incident[62733]: completed
</txt>
</msg>
<msg time='2009-03-30T13:23:44.500-04:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='TEST_HOST1' host_addr='10.38.11.20' module=''
pid='6724'>
<txt>found dead shared server 'S001', pid = (19, 3)
</txt>
</msg>The trace files contain the following:
Trace file c:\app\diag\rdbms\orcl\orcl\trace\orcl_s001_16144.trc
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Windows NT Version V5.2 Service Pack 2
CPU : 16 - type 586, 4 Physical Cores
Process Affinity : 0x00000000
Memory (Avail/Total): Ph:10902M/24571M, Ph+PgF:8218M/26299M, VA:349M/2047M
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 19
Windows thread id: 16144, image: ORACLE.EXE (S001)
*** 2009-03-30 13:23:21.828
*** SESSION ID:(129.4177) 2009-03-30 13:23:21.828
*** CLIENT ID:() 2009-03-30 13:23:21.828
*** SERVICE NAME:(SYS$USERS) 2009-03-30 13:23:21.828
*** MODULE NAME:() 2009-03-30 13:23:21.828
*** ACTION NAME:() 2009-03-30 13:23:21.828
Exception [type: ACCESS_VIOLATION, UNABLE_TO_READ] [ADDR:0x98] [PC:0x37FAE2B, _qmuwsPrintPackWSDL()+1031]
Incident 62733 created, dump file: c:\app\diag\rdbms\orcl\orcl\incident\incdir_62733\orcl_s001_16144_i62733.trc
ORA-07445: exception encountered: core dump [qmuwsPrintPackWSDL()+1031] [ACCESS_VIOLATION] [ADDR:0x98] [PC:0x37FAE2B] [UNABLE_TO_READ] []I am at a loss on quickly resolving this issue. I will be attempting to find a solution via an SR, but I am not sure how responsive that will be. Any help is appreciated.
SR Number: 7504349.992Quick test for 11.1.0.7.0 (linux_x64) does not show a problem
SQL> connect sys/oracle as sysdba
Connected.
SQL> --
SQL> def USERNAME=WEB_API
SQL> --
SQL> def PASSWORD=WEB_API
SQL> --
SQL> DROP USER &USERNAME CASCADE
2 /
old 1: DROP USER &USERNAME CASCADE
new 1: DROP USER WEB_API CASCADE
DROP USER WEB_API CASCADE
ERROR at line 1:
ORA-01918: user 'WEB_API' does not exist
SQL> grant connect, resource to &USERNAME identified by &PASSWORD
2 /
old 1: grant connect, resource to &USERNAME identified by &PASSWORD
new 1: grant connect, resource to WEB_API identified by WEB_API
Grant succeeded.
SQL> begin
2 dbms_network_acl_admin.drop_acl('localhost.xml');
3 end;
4 /
begin
ERROR at line 1:
ORA-31001: Invalid resource handle or path name "/sys/acls/localhost.xml"
ORA-06512: at "XDB.DBMS_XDB", line 337
ORA-06512: at "SYS.DBMS_NETWORK_ACL_ADMIN", line 428
ORA-06512: at line 2
SQL> begin
2 dbms_network_acl_admin.create_acl('localhost.xml', 'ACL for 127.0.0.1', '&USERNAME', true, 'connect');
3 dbms_network_acl_admin.assign_acl('localhost.xml', '127.0.0.1');
4 end;
5 /
old 2: dbms_network_acl_admin.create_acl('localhost.xml', 'ACL for 127.0.0.1', '&USERNAME', true, 'connect');
new 2: dbms_network_acl_admin.create_acl('localhost.xml', 'ACL for 127.0.0.1', 'WEB_API', true, 'connect');
PL/SQL procedure successfully completed.
SQL> COMMIT
2 /
Commit complete.
SQL> GRANT XDB_WEBSERVICES TO &USERNAME
2 /
old 1: GRANT XDB_WEBSERVICES TO &USERNAME
new 1: GRANT XDB_WEBSERVICES TO WEB_API
Grant succeeded.
SQL> GRANT XDB_WEBSERVICES_OVER_HTTP TO &USERNAME
2 /
old 1: GRANT XDB_WEBSERVICES_OVER_HTTP TO &USERNAME
new 1: GRANT XDB_WEBSERVICES_OVER_HTTP TO WEB_API
Grant succeeded.
SQL> connect &USERNAME/&PASSWORD
Connected.
SQL> --
SQL> var url varchar2(700)
SQL> --
SQL> set pages 0 long 10000
SQL> --
SQL>
SQL> CREATE OR REPLACE TYPE ACCOUNT_O AS OBJECT
2 (
3 ACCOUNT_ID NUMBER(9, 0),
4 ACCOUNT_NUMBER VARCHAR2(100),
5 ACCOUNT_NAME VARCHAR2(50),
6 ACTIVE NUMBER(1, 0),
7 DEACTIVE_DATE DATE,
8 START_DATE DATE,
9 END_DATE DATE,
10 ROLLOVER_ACCOUNT_NUMBER VARCHAR2(100),
11 ROLLOVER_ACCOUNT_NAME VARCHAR2(50),
12 ROLLOVER_SPEED_CODE VARCHAR2(10),
13 LAST_UPDATE_DATE DATE
14 )
15 /
Type created.
SQL> CREATE OR REPLACE TYPE ACCOUNT_SK AS OBJECT( ACCOUNT_ID NUMBER(38) )
2 /
Type created.
SQL> CREATE OR REPLACE PACKAGE ACCOUNT_API AS
2 FUNCTION "NEW"(ACCOUNT_ID NUMBER,
3 ACCOUNT_NUMBER VARCHAR2,
4 ACCOUNT_NAME VARCHAR2 DEFAULT NULL,
5 ACTIVE NUMBER DEFAULT NULL,
6 DEACTIVE_DATE DATE DEFAULT NULL,
7 START_DATE DATE DEFAULT NULL,
8 END_DATE DATE DEFAULT NULL,
9 ROLLOVER_ACCOUNT_NUMBER VARCHAR2 DEFAULT NULL,
10 ROLLOVER_ACCOUNT_NAME VARCHAR2 DEFAULT NULL,
11 ROLLOVER_SPEED_CODE VARCHAR2 DEFAULT NULL,
12 LAST_UPDATE_DATE DATE DEFAULT NULL)
13 RETURN ACCOUNT_SK;
14 PROCEDURE "UPDATE"(ACCOUNT_ID NUMBER,
15 ACCOUNT_NUMBER VARCHAR2,
16 ACCOUNT_NAME VARCHAR2 DEFAULT NULL,
17 ACTIVE NUMBER DEFAULT NULL,
18 DEACTIVE_DATE DATE DEFAULT NULL,
19 START_DATE DATE DEFAULT NULL,
20 END_DATE DATE DEFAULT NULL,
21 ROLLOVER_ACCOUNT_NUMBER VARCHAR2 DEFAULT NULL,
22 ROLLOVER_ACCOUNT_NAME VARCHAR2 DEFAULT NULL,
23 ROLLOVER_SPEED_CODE VARCHAR2 DEFAULT NULL,
24 LAST_UPDATE_DATE DATE DEFAULT NULL);
25 PROCEDURE "DELETE"(ACCOUNT_ID NUMBER);
26 FUNCTION "GET"(ACCOUNT_ID NUMBER) RETURN ACCOUNT_O;
27 END ACCOUNT_API;
28 /
Package created.
SQL> BEGIN
2 :url := 'http://&USERNAME:&[email protected]:' || dbms_xdb.getHttpPort() || '/orawsv/&USERNAME/ACCOUNT_API';
3 end;
4 /
old 2: :url := 'http://&USERNAME:&[email protected]:' || dbms_xdb.getHttpPort() || '/orawsv/&USERNAME/ACCOUNT_API';
new 2: :url := 'http://WEB_API:[email protected]:' || dbms_xdb.getHttpPort() || '/orawsv/WEB_API/ACCOUNT_API';
PL/SQL procedure successfully completed.
SQL> print url
http://WEB_API:[email protected]:80/orawsv/WEB_API/ACCOUNT_API
SQL> --
SQL> select httpuritype( :url || '?wsdl' ).getXML() from dual
2 /
<definitions name="ACCOUNT_API" targetNamespace="http://xmlns.oracle.com/orawsv/
WEB_API/ACCOUNT_API" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://
xmlns.oracle.com/orawsv/WEB_API/ACCOUNT_API" xmlns:xsd="http://www.w3.org/2001/X
MLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<types>
<xsd:schema targetNamespace="http://xmlns.oracle.com/orawsv/WEB_API/ACCOUNT_
API" elementFormDefault="qualified">
<xsd:element name="UPDATEInput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="START_DATE-DATE-IN" minOccurs="0" maxOccurs="1" t
ype="xsd:date"/>
<xsd:element name="ROLLOVER_SPEED_CODE-VARCHAR2-IN" minOccurs="0" ma
xOccurs="1" type="xsd:string"/>
<xsd:element name="ROLLOVER_ACCOUNT_NUMBER-VARCHAR2-IN" minOccurs="0
" maxOccurs="1" type="xsd:string"/>
<xsd:element name="ROLLOVER_ACCOUNT_NAME-VARCHAR2-IN" minOccurs="0"
maxOccurs="1" type="xsd:string"/>
<xsd:element name="LAST_UPDATE_DATE-DATE-IN" minOccurs="0" maxOccurs
="1" type="xsd:date"/>
<xsd:element name="END_DATE-DATE-IN" minOccurs="0" maxOccurs="1" typ
e="xsd:date"/>
<xsd:element name="DEACTIVE_DATE-DATE-IN" minOccurs="0" maxOccurs="1
" type="xsd:date"/>
<xsd:element name="ACTIVE-NUMBER-IN" minOccurs="0" maxOccurs="1" typ
e="xsd:double"/>
<xsd:element name="ACCOUNT_NUMBER-VARCHAR2-IN" type="xsd:string"/>
<xsd:element name="ACCOUNT_NAME-VARCHAR2-IN" minOccurs="0" maxOccurs
="1" type="xsd:string"/>
<xsd:element name="ACCOUNT_ID-NUMBER-IN" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="UPDATEOutput">
<xsd:complexType>
<xsd:sequence>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="CACCOUNT_SK-NEWInput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="START_DATE-DATE-IN" minOccurs="0" maxOccurs="1" t
ype="xsd:date"/>
<xsd:element name="ROLLOVER_SPEED_CODE-VARCHAR2-IN" minOccurs="0" ma
xOccurs="1" type="xsd:string"/>
<xsd:element name="ROLLOVER_ACCOUNT_NUMBER-VARCHAR2-IN" minOccurs="0
" maxOccurs="1" type="xsd:string"/>
<xsd:element name="ROLLOVER_ACCOUNT_NAME-VARCHAR2-IN" minOccurs="0"
maxOccurs="1" type="xsd:string"/>
<xsd:element name="LAST_UPDATE_DATE-DATE-IN" minOccurs="0" maxOccurs
="1" type="xsd:date"/>
<xsd:element name="END_DATE-DATE-IN" minOccurs="0" maxOccurs="1" typ
e="xsd:date"/>
<xsd:element name="DEACTIVE_DATE-DATE-IN" minOccurs="0" maxOccurs="1
" type="xsd:date"/>
<xsd:element name="ACTIVE-NUMBER-IN" minOccurs="0" maxOccurs="1" typ
e="xsd:double"/>
<xsd:element name="ACCOUNT_NUMBER-VARCHAR2-IN" type="xsd:string"/>
<xsd:element name="ACCOUNT_NAME-VARCHAR2-IN" minOccurs="0" maxOccurs
="1" type="xsd:string"/>
<xsd:element name="ACCOUNT_ID-NUMBER-IN" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="NEWOutput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="RETURN" type="tns:ACCOUNT_SKType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="CACCOUNT_O-GETInput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ACCOUNT_ID-NUMBER-IN" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GETOutput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="RETURN" type="tns:ACCOUNT_OType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="DELETEInput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ACCOUNT_ID-NUMBER-IN" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="DELETEOutput">
<xsd:complexType>
<xsd:sequence>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="ACCOUNT_SKType">
<xsd:sequence>
<xsd:element name="ACCOUNT_SK">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ACCOUNT_ID" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ACCOUNT_OType">
<xsd:sequence>
<xsd:element name="ACCOUNT_O">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ACCOUNT_ID" type="xsd:double"/>
<xsd:element name="ACCOUNT_NUMBER">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="ACCOUNT_NAME">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="50"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="ACTIVE" type="xsd:double"/>
<xsd:element name="DEACTIVE_DATE" type="xsd:date"/>
<xsd:element name="START_DATE" type="xsd:date"/>
<xsd:element name="END_DATE" type="xsd:date"/>
<xsd:element name="ROLLOVER_ACCOUNT_NUMBER">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="ROLLOVER_ACCOUNT_NAME">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="50"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="ROLLOVER_SPEED_CODE">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="10"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="LAST_UPDATE_DATE" type="xsd:date"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</types>
<message name="UPDATEInputMessage">
<part name="parameters" element="tns:UPDATEInput"/>
</message>
<message name="UPDATEOutputMessage">
<part name="parameters" element="tns:UPDATEOutput"/>
</message>
<message name="NEWInputMessage">
<part name="parameters" element="tns:CACCOUNT_SK-NEWInput"/>
</message>
<message name="NEWOutputMessage">
<part name="parameters" element="tns:NEWOutput"/>
</message>
<message name="GETInputMessage">
<part name="parameters" element="tns:CACCOUNT_O-GETInput"/>
</message>
<message name="GETOutputMessage">
<part name="parameters" element="tns:GETOutput"/>
</message>
<message name="DELETEInputMessage">
<part name="parameters" element="tns:DELETEInput"/>
</message>
<message name="DELETEOutputMessage">
<part name="parameters" element="tns:DELETEOutput"/>
</message>
<portType name="ACCOUNT_APIPortType">
<operation name="UPDATE">
<input message="tns:UPDATEInputMessage"/>
<output message="tns:UPDATEOutputMessage"/>
</operation>
<operation name="NEW">
<input message="tns:NEWInputMessage"/>
<output message="tns:NEWOutputMessage"/>
</operation>
<operation name="GET">
<input message="tns:GETInputMessage"/>
<output message="tns:GETOutputMessage"/>
</operation>
<operation name="DELETE">
<input message="tns:DELETEInputMessage"/>
<output message="tns:DELETEOutputMessage"/>
</operation>
</portType>
<binding name="ACCOUNT_APIBinding" type="tns:ACCOUNT_APIPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/ht
tp"/>
<operation name="UPDATE">
<soap:operation soapAction="UPDATE"/>
<input>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body parts="parameters" use="literal"/>
</output>
</operation>
<operation name="NEW">
<soap:operation soapAction="NEW"/>
<input>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body parts="parameters" use="literal"/>
</output>
</operation>
<operation name="GET">
<soap:operation soapAction="GET"/>
<input>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body parts="parameters" use="literal"/>
</output>
</operation>
<operation name="DELETE">
<soap:operation soapAction="DELETE"/>
<input>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body parts="parameters" use="literal"/>
</output>
</operation>
</binding>
<service name="ACCOUNT_APIService">
<documentation>Oracle Web Service</documentation>
<port name="ACCOUNT_APIPort" binding="tns:ACCOUNT_APIBinding">
<soap:address location="http://127.0.0.1/orawsv/WEB_API/ACCOUNT_API"/>
</port>
</service>
</definitions>But I think you said it was intermittant -
ORA-31050:Access denied when trying enabling the database-native Web servic
Dear all,
I'm trying to follow the instruction of OBE about "Using Oracle XML DB Web Services for Service-Oriented Architecture " as this url http://st-curriculum.oracle.com/obe/db/11g/r1/prod/datamgmt/xmldb2_b/xmldb2_b.htm#http .
I would like to enable the database-native Web service end point in Oracle XML DB and I already execute the script to create Web Service Endpoint.
Anyway, I got the following error.
ORA-31050: Access denied
ORA-06512: at "XDB.DBMS_XDB", line 528
ORA-06512: at "SYSTEM.ADDSERVLETMAPPING", line 91
I found that this procedure was created on system schema but the problem occur when I tried to call ADDSERVLETMAPPING procedure.
This is a code that I used to enable.
set pagesize 100
set linesize 132
set long 20000
set echo on
-- conn sys/oracle as sysdba
create or replace procedure addServletMapping (pattern varchar2,
servletname varchar2,
dispname varchar2,
servletclass varchar2,
servletschema varchar2,
language varchar2,
description varchar2,
securityRole xmltype) as
xdbconfig xmltype;
begin
xdbconfig := dbms_xdb.cfg_get();
select deleteXML
xdbconfig,
'/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-list/servlet[servlet-name="' || servletname || '"]'
into xdbconfig
from dual;
if (language = 'C') then
select insertChildXML
xdbconfig,
'/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-list',
'servlet',
xmlElement
"servlet",
xmlAttributes('http://xmlns.oracle.com/xdb/xdbconfig.xsd' as "xmlns"),
xmlForest
servletname as "servlet-name",
language as "servlet-language",
dispname as "display-name",
description as "description"
securityRole
into xdbconfig
from dual;
else
select insertChildXML
xdbconfig,
'/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-list',
'servlet',
xmlElement
"servlet",
xmlAttributes('http://xmlns.oracle.com/xdb/xdbconfig.xsd' as "xmlns"),
xmlForest
servletname as "servlet-name",
language as "servlet-language",
dispname as "display-name",
description as "description",
servletclass as "servlet-class",
servletschema as "servlet-schema"
into xdbconfig
from dual;
end if;
select deleteXML
xdbconfig,
'/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-mappings/servlet-mapping[servlet-name="' || servletname || '"]'
into xdbconfig
from dual;
select insertChildXML
xdbconfig,
'/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-mappings',
'servlet-mapping',
xmltype
'<servlet-mapping xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd">
<servlet-pattern>'||pattern||'</servlet-pattern>
<servlet-name>'||servletname||'</servlet-name>
</servlet-mapping>'
into xdbconfig
from dual;
xdb.dbms_xdb.cfg_update(xdbconfig);
end;
call addServletMapping(
'/orawsv/*',
'orawsv',
'Oracle Query Web Service',
null,
null,
'C',
'Web Services Servlet',
xmltype(
'<security-role-ref>
<role-name>XDB_WEBSERVICES</role-name>
<role-link>XDB_WEBSERVICES</role-link>
</security-role-ref>'
call addServletMapping(
'/orawsdl/*',
'orawsdl',
'Oracle WSDLs',
null,
null,
'C',
'WSDL Servlet',
xmltype(
'<security-role-ref>
<role-name>XDB_WEBSERVICES</role-name>
<role-link>XDB_WEBSERVICES</role-link>
</security-role-ref>'
--grant XDB_WEBSERVICES to oe
grant XDB_WEBSERVICES to TESTDB
-- For 11g only
--grant XDB_WEBSERVICES_OVER_HTTP to oe
grant XDB_WEBSERVICES_OVER_HTTP to TESTDB
--grant XDB_WEBSERVICES_WITH_PUBLIC to oe
grant XDB_WEBSERVICES_WITH_PUBLIC to TESTDB
-- Clean up afterward
drop procedure addServletMapping
Regards,
Zenoni
Edited by: zenoni on Jan 28, 2011 10:18 AMTest if you can access the generic WSDL using a browser
http://server:port/orawsv?wsdlYou should get prompted for a username and password. If you provide the username and password of a database user who was been granted the Web Services Roles you should see the query service WSDL
<definitions name="orawsv" targetNamespace="http://xmlns.oracle.com/orawsv"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://xmlns.oracle.com/orawsv"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.xmlsoap.org/wsdl/ http://schemas.xmlsoap.org/wsdl/">
<types>
<xsd:schema
targetNamespace="http://xmlns.oracle.com/orawsv"
elementFormDefault="qualified">
<xsd:element name="query">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DDL_text" type="xsd:string"
minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="query_text">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="type">
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="SQL" />
<xsd:enumeration value="XQUERY" />
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="bind">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="name" type="xsd:string" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="bindXML">
<xsd:complexType>
<xsd:sequence>
<xsd:any/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
<xsd:element name="null_handling" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="DROP_NULLS" />
<xsd:enumeration value="NULL_ATTR" />
<xsd:enumeration value="EMPTY_TAG" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="max_rows" type="xsd:positiveInteger" minOccurs="0"/>
<xsd:element name="skip_rows" type="xsd:positiveInteger" minOccurs="0"/>
<xsd:element name="pretty_print" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="indentation_width" type="xsd:positiveInteger" minOccurs="0"/>
<xsd:element name="rowset_tag" type="xsd:string" minOccurs="0"/>
<xsd:element name="row_tag" type="xsd:string" minOccurs="0"/>
<xsd:element name="item_tags_for_coll" type="xsd:boolean" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="queryOut">
<xsd:complexType>
<xsd:sequence>
<xsd:any/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
<message name="QueryInput">
<part name="body" element="tns:query"/>
</message>
<message name="XMLOutput">
<part name="body" element="tns:queryOut"/>
</message>
<portType name="ORAWSVPortType">
<operation name="XMLFromQuery">
<input message="tns:QueryInput"/>
<output message="tns:XMLOutput"/>
</operation>
</portType>
<binding name="ORAWSVBinding" type="tns:ORAWSVPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="XMLFromQuery">
<soap:operation soapAction="http://localhost/orawsv"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="ORAWSVService">
<documentation>Oracle Web Service</documentation>
<port name="ORAWSVPort" binding="tns:ORAWSVBinding">
<soap:address location="http://localhost/orawsv"/>
</port>
</service>
</definitions>Edited by: mdrake on Jan 27, 2011 8:42 PM -
Database Native Web Services : XMLTYPE parameter in PL/SQL with XMLSCHEMA?
Hi,
I would like to build a function with a XMLTYPE parameter which is schema based, something like this:
CREATE FUNCTION xy (p_xml XMLTYPE XMLSCHEMA 'http://myschema.com') ...
At the moment I do the following inside the code:
l_xml := p_xml.createSchemaBasedXML('http://myschema.com');
l_xml.schemavalidate();
/* validate XML against XSD */
l_nbr := l_xml.isschemavalidated();
The purpose why I would like to directly put the schema in the declaration is that I would like to use this function as a Oracle Native Web Service. The web service doesn't know the structure of the xml parameter as the schema is not knows in the declaration.
Thanks and kind regards,
Andreas
Edited by: mdrake on Nov 8, 2009 9:55 PMJust for kicks here's the best I can come up with..
SQL> connect &USERNAME/&PASSWORD
Connected.
SQL> --
SQL> --
SQL> --
SQL> declare
2 XMLSCHEMA XMLTYPE := XMLTYPE(
3 '<!-- edited with XML Spy v4.0 U (http://www.xmlspy.com) by Mark (Drake) -->
4 <xs:schema targetNamespace="http://xmlns.example.com/xsd/purchaseOrder"
5 xmlns="http://xmlns.example.com/xsd/purchaseOrder"
6 xmlns:xs="http://www.w3.org/2001/XMLSchema"
7 xmlns:xdb="http://xmlns.oracle.com/xdb" version="1.0" xdb:storeVarrayAsTable="true">
8 <xs:element name="PurchaseOrder" type="PurchaseOrderType" xdb:defaultTable="PURCHASEORDER"/>
9 <xs:complexType name="PurchaseOrderType" xdb:SQLType="PURCHASEORDER_T">
10 <xs:sequence>
11 <xs:element name="Reference" type="ReferenceType" xdb:SQLName="REFERENCE"/>
12 <xs:element name="Actions" type="ActionsType" xdb:SQLName="ACTIONS"/>
13 <xs:element name="Reject" type="RejectionType" minOccurs="0" xdb:SQLName="REJECTION"/>
14 <xs:element name="Requestor" type="RequestorType" xdb:SQLName="REQUESTOR"/>
15 <xs:element name="User" type="UserType" xdb:SQLName="USERID"/>
16 <xs:element name="CostCenter" type="CostCenterType" xdb:SQLName="COST_CENTER"/>
17 <xs:element name="ShippingInstructions" type="ShippingInstructionsType" xdb:SQLName="SHIPPING_INSTRUCTIONS"/>
18 <xs:element name="SpecialInstructions" type="SpecialInstructionsType" xdb:SQLName="SPECIAL_INSTRUCTIONS"/>
19 <xs:element name="LineItems" type="LineItemsType" xdb:SQLName="LINEITEMS"/>
20 </xs:sequence>
21 </xs:complexType>
22 <xs:complexType name="LineItemsType" xdb:SQLType="LINEITEMS_T">
23 <xs:sequence>
24 <xs:element name="LineItem" type="LineItemType" maxOccurs="unbounded" xdb:SQLName="LINEITEM" xdb:SQLCollType="LINEITEM_V"/>
25 </xs:sequence>
26 </xs:complexType>
27 <xs:complexType name="LineItemType" xdb:SQLType="LINEITEM_T">
28 <xs:sequence>
29 <xs:element name="Description" type="DescriptionType" xdb:SQLName="DESCRIPTION"/>
30 <xs:element name="Part" type="PartType" xdb:SQLName="PART"/>
31 </xs:sequence>
32 <xs:attribute name="ItemNumber" type="xs:integer" xdb:SQLName="ITEMNUMBER" xdb:SQLType="NUMBER"/>
33 </xs:complexType>
34 <xs:complexType name="PartType" xdb:SQLType="PART_T">
35 <xs:attribute name="Id" xdb:SQLName="PART_NUMBER" xdb:SQLType="VARCHAR2">
36 <xs:simpleType>
37 <xs:restriction base="xs:string">
38 <xs:minLength value="10"/>
39 <xs:maxLength value="14"/>
40 </xs:restriction>
41 </xs:simpleType>
42 </xs:attribute>
43 <xs:attribute name="Quantity" type="moneyType" xdb:SQLName="QUANTITY"/>
44 <xs:attribute name="UnitPrice" type="quantityType" xdb:SQLName="UNITPRICE"/>
45 </xs:complexType>
46 <xs:simpleType name="ReferenceType">
47 <xs:restriction base="xs:string">
48 <xs:minLength value="18"/>
49 <xs:maxLength value="30"/>
50 </xs:restriction>
51 </xs:simpleType>
52 <xs:complexType name="ActionsType" xdb:SQLType="ACTIONS_T">
53 <xs:sequence>
54 <xs:element name="Action" maxOccurs="4" xdb:SQLName="ACTION" xdb:SQLCollType="ACTION_V">
55 <xs:complexType xdb:SQLType="ACTION_T">
56 <xs:sequence>
57 <xs:element name="User" type="UserType" xdb:SQLName="ACTIONED_BY"/>
58 <xs:element name="Date" type="DateType" minOccurs="0" xdb:SQLName="DATE_ACTIONED"/>
59 </xs:sequence>
60 </xs:complexType>
61 </xs:element>
62 </xs:sequence>
63 </xs:complexType>
64 <xs:complexType name="RejectionType" xdb:SQLType="REJECTION_T">
65 <xs:all>
66 <xs:element name="User" type="UserType" minOccurs="0" xdb:SQLName="REJECTED_BY"/>
67 <xs:element name="Date" type="DateType" minOccurs="0" xdb:SQLName="DATE_REJECTED"/>
68 <xs:element name="Comments" type="CommentsType" minOccurs="0" xdb:SQLName="REASON_REJECTED"/>
69 </xs:all>
70 </xs:complexType>
71 <xs:complexType name="ShippingInstructionsType" xdb:SQLType="SHIPPING_INSTRUCTIONS_T">
72 <xs:sequence>
73 <xs:element name="name" type="NameType" minOccurs="0" xdb:SQLName="SHIP_TO_NAME"/>
74 <xs:element name="address" type="AddressType" minOccurs="0" xdb:SQLName="SHIP_TO_ADDRESS"/>
75 <xs:element name="telephone" type="TelephoneType" minOccurs="0" xdb:SQLName="SHIP_TO_PHONE"/>
76 </xs:sequence>
77 </xs:complexType>
78 <xs:simpleType name="moneyType">
79 <xs:restriction base="xs:decimal">
80 <xs:fractionDigits value="2"/>
81 <xs:totalDigits value="12"/>
82 </xs:restriction>
83 </xs:simpleType>
84 <xs:simpleType name="quantityType">
85 <xs:restriction base="xs:decimal">
86 <xs:fractionDigits value="4"/>
87 <xs:totalDigits value="8"/>
88 </xs:restriction>
89 </xs:simpleType>
90 <xs:simpleType name="UserType">
91 <xs:restriction base="xs:string">
92 <xs:minLength value="1"/>
93 <xs:maxLength value="10"/>
94 </xs:restriction>
95 </xs:simpleType>
96 <xs:simpleType name="RequestorType">
97 <xs:restriction base="xs:string">
98 <xs:minLength value="0"/>
99 <xs:maxLength value="128"/>
100 </xs:restriction>
101 </xs:simpleType>
102 <xs:simpleType name="CostCenterType">
103 <xs:restriction base="xs:string">
104 <xs:minLength value="1"/>
105 <xs:maxLength value="4"/>
106 </xs:restriction>
107 </xs:simpleType>
108 <xs:simpleType name="VendorType">
109 <xs:restriction base="xs:string">
110 <xs:minLength value="0"/>
111 <xs:maxLength value="20"/>
112 </xs:restriction>
113 </xs:simpleType>
114 <xs:simpleType name="PurchaseOrderNumberType">
115 <xs:restriction base="xs:integer"/>
116 </xs:simpleType>
117 <xs:simpleType name="SpecialInstructionsType">
118 <xs:restriction base="xs:string">
119 <xs:minLength value="0"/>
120 <xs:maxLength value="2048"/>
121 </xs:restriction>
122 </xs:simpleType>
123 <xs:simpleType name="NameType">
124 <xs:restriction base="xs:string">
125 <xs:minLength value="1"/>
126 <xs:maxLength value="20"/>
127 </xs:restriction>
128 </xs:simpleType>
129 <xs:simpleType name="AddressType">
130 <xs:restriction base="xs:string">
131 <xs:minLength value="1"/>
132 <xs:maxLength value="256"/>
133 </xs:restriction>
134 </xs:simpleType>
135 <xs:simpleType name="TelephoneType">
136 <xs:restriction base="xs:string">
137 <xs:minLength value="1"/>
138 <xs:maxLength value="24"/>
139 </xs:restriction>
140 </xs:simpleType>
141 <xs:simpleType name="DateType">
142 <xs:restriction base="xs:date"/>
143 </xs:simpleType>
144 <xs:simpleType name="CommentsType">
145 <xs:restriction base="xs:string">
146 <xs:minLength value="1"/>
147 <xs:maxLength value="2048"/>
148 </xs:restriction>
149 </xs:simpleType>
150 <xs:simpleType name="DescriptionType">
151 <xs:restriction base="xs:string">
152 <xs:minLength value="1"/>
153 <xs:maxLength value="256"/>
154 </xs:restriction>
155 </xs:simpleType>
156 </xs:schema>');
157 begin
158 dbms_xmlschema.registerSchema( SCHEMAURL => '/xsd/purchaseOrder.xsd', SCHEMADOC => XMLSCHEMA);
159 end;
160 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.94
SQL> VAR URL VARCHAR2(1024)
SQL> VAR RESULT CLOB;
SQL> --
SQL> create or replace package TESTPROC
2 as
3 function getPurchaseOrder(P_REFERENCE VARCHAR2) return XMLTYPE;
4 function expandWSDL return XMLTYPE;
5 end;
6 /
Package created.
Elapsed: 00:00:00.02
SQL> --
SQL> create or replace package body TESTPROC
2 as
3 --
4 function getPurchaseOrder(P_REFERENCE VARCHAR2)
5 return XMLType
6 as
7 V_RESULT XMLTYPE;
8 begin
9 select object_value
10 into V_RESULT
11 from PURCHASEORDER
12 where XMLEXISTS('$p/PurchaseOrder[Reference=$ref]' passing P_REFERENCE as "ref");
13 return V_RESULT;
14 end;
15 --
16 function getWSDL
17 return XMLType
18 as
19 V_WSDL_URL VARCHAR2(700) := 'http://&USERNAME:&PASSWORD@localhost:' || dbms_xdb.getHttpPort() || '/orawsv/&USERNAME/TESTPROC/GETPURCHASEORDER';
20 V_WSDL XMLTYPE;
21 begin
22 select httpuritype( V_WSDL_URL || '?wsdl' ).getXML()
23 into V_WSDL
24 from dual;
25 return V_WSDL;
26 end;
27 --
28 function expandWSDL
29 return XMLTYPE
30 as
31 V_INTERNAL_URL VARCHAR2(700);
32 V_EXTERNAL_URL VARCHAR2(700);
33 V_NAMESPACE VARCHAR2(4000);
34 V_WSDL XMLTYPE := getWSDL();
35 V_XSD XMLTYPE;
36 begin
37 -- Need to provide real logic to determine which XSD goes with which parameter...
38
39 -- get the TARGETNAMESPACE for the import element (Not sure how this would work with a noNamespace Schema since we'd be in Chamelian Land)
40 select SCHEMA_URL,
41 XMLCAST
42 (
43 XMLQUERY
44 (
45 'declare namespace xsd = "http://www.w3.org/2001/XMLSchema"; (::)
46 $xsd/xsd:schema/@targetNamespace'
47 passing SCHEMA as "xsd" returning content
48 )
49 as VARCHAR2(4000)
50 )
51 into V_INTERNAL_URL, V_NAMESPACE
52 from USER_XML_SCHEMAS
53 where SCHEMA_URL = '/xsd/purchaseOrder.xsd';
54
55 V_EXTERNAL_URL := '/sys/schemas/&USERNAME' || V_INTERNAL_URL;
56
57 -- Add <xsd:import namespace="http://xmlns.example.com/xsd/purchaseOrder" schemaLocation="http://localhost:80/sys/schemas/WSDLTEST/xsd/purchaseOrder.xsd
"/>
58
59 select insertXMLBefore
60 (
61 V_WSDL,
62 '//xsd:schema/child::*[1]',
63 xmlElement("xsd:import",xmlAttributes('http://www.w3.org/2001/XMLSchema' as "xmlns:xsd",V_NAMESPACE as "namespace",V_EXTERNAL_URL as "schemaLoc
ation")),
64 'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
65 )
66 into V_WSDL
67 from dual;
68
69 select updateXML
70 (
71 V_WSDL,
72 '//xsd:schema/xsd:element[@name="GETPURCHASEORDEROutput"]/xsd:complexType/xsd:sequence/xsd:element[@name="RETURN"]/xsd:complexType',
73 XMLElement
74 (
75 "xsd:complexType",
76 XMLAttributes('http://www.w3.org/2001/XMLSchema' as "xmlns:xsd"),
77 XMLElement
78 (
79 "xsd:sequence",
80 XMLElement
81 (
82 "xsd:element",
83 xmlAttributes('http://xmlns.example.com/xsd/purchaseOrder' as "xmlns:po",'po:PurchaseOrder' as "ref")
84 )
85 )
86 ),
87 'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
88 )
89 into V_WSDL
90 from dual;
91
92 return V_WSDL;
93 end;
94 --
95 end;
96 /
old 19: V_WSDL_URL VARCHAR2(700) := 'http://&USERNAME:&PASSWORD@localhost:' || dbms_xdb.getHttpPort() || '/orawsv/&USERNAME/TESTPROC/GETPURCHASEORDER';
new 19: V_WSDL_URL VARCHAR2(700) := 'http://WSDLTEST:WSDLTEST@localhost:' || dbms_xdb.getHttpPort() || '/orawsv/WSDLTEST/TESTPROC/GETPURCHASEORDER';
old 55: V_EXTERNAL_URL := '/sys/schemas/&USERNAME' || V_INTERNAL_URL;
new 55: V_EXTERNAL_URL := '/sys/schemas/WSDLTEST' || V_INTERNAL_URL;
Package body created.
Elapsed: 00:00:00.05
SQL> show errors
No errors.
SQL> --
SQL> BEGIN
2 :URL := 'http://&USERNAME:&PASSWORD@localhost:' || dbms_xdb.getHttpPort() || '/orawsv/&USERNAME/TESTPROC';
3 end;
4 /
old 2: :URL := 'http://&USERNAME:&PASSWORD@localhost:' || dbms_xdb.getHttpPort() || '/orawsv/&USERNAME/TESTPROC';
new 2: :URL := 'http://WSDLTEST:WSDLTEST@localhost:' || dbms_xdb.getHttpPort() || '/orawsv/WSDLTEST/TESTPROC';
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.00
SQL> print url
URL
http://WSDLTEST:WSDLTEST@localhost:80/orawsv/WSDLTEST/TESTPROC
SQL> --
SQL> set long 10000000 pages 0 lines 160
SQL> --
SQL> select httpuritype( :URL || '?wsdl' ).getXML()
2 from dual
3 /
<definitions name="TESTPROC" targetNamespace="http://xmlns.oracle.com/orawsv/WSDLTEST/TESTPROC" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xmlns
.oracle.com/orawsv/WSDLTEST/TESTPROC" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<types>
<xsd:schema targetNamespace="http://xmlns.oracle.com/orawsv/WSDLTEST/TESTPROC" elementFormDefault="qualified">
<xsd:element name="CXMLTYPE-GETPURCHASEORDERInput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="P_REFERENCE-VARCHAR2-IN" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GETPURCHASEORDEROutput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="RETURN">
<xsd:complexType>
<xsd:sequence>
<xsd:any/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="CXMLTYPE-EXPANDWSDLInput">
<xsd:complexType>
<xsd:sequence>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="EXPANDWSDLOutput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="RETURN">
<xsd:complexType>
<xsd:sequence>
<xsd:any/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
<message name="GETPURCHASEORDERInputMessage">
<part name="parameters" element="tns:CXMLTYPE-GETPURCHASEORDERInput"/>
</message>
<message name="GETPURCHASEORDEROutputMessage">
<part name="parameters" element="tns:GETPURCHASEORDEROutput"/>
</message>
<message name="EXPANDWSDLInputMessage">
<part name="parameters" element="tns:CXMLTYPE-EXPANDWSDLInput"/>
</message>
<message name="EXPANDWSDLOutputMessage">
<part name="parameters" element="tns:EXPANDWSDLOutput"/>
</message>
<portType name="TESTPROCPortType">
<operation name="GETPURCHASEORDER">
<input message="tns:GETPURCHASEORDERInputMessage"/>
<output message="tns:GETPURCHASEORDEROutputMessage"/>
</operation>
<operation name="EXPANDWSDL">
<input message="tns:EXPANDWSDLInputMessage"/>
<output message="tns:EXPANDWSDLOutputMessage"/>
</operation>
</portType>
<binding name="TESTPROCBinding" type="tns:TESTPROCPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GETPURCHASEORDER">
<soap:operation soapAction="GETPURCHASEORDER"/>
<input>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body parts="parameters" use="literal"/>
</output>
</operation>
<operation name="EXPANDWSDL">
<soap:operation soapAction="EXPANDWSDL"/>
<input>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body parts="parameters" use="literal"/>
</output>
</operation>
</binding>
<service name="TESTPROCService">
<documentation>Oracle Web Service</documentation>
<port name="TESTPROCPort" binding="tns:TESTPROCBinding">
<soap:address location="http://localhost:80/orawsv/WSDLTEST/TESTPROC"/>
</port>
</service>
</definitions>
Elapsed: 00:00:00.33
SQL> select TESTPROC.expandWSDL()
2 from dual
3 /
<definitions name="GETPURCHASEORDER" targetNamespace="http://xmlns.oracle.com/orawsv/WSDLTEST/TESTPROC/GETPURCHASEORDER" xmlns="http://schemas.xmlsoap.org/wsdl/
" xmlns:tns="http://xmlns.oracle.com/orawsv/WSDLTEST/TESTPROC/GETPURCHASEORDER" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.
org/wsdl/soap/">
<types>
<xsd:schema targetNamespace="http://xmlns.oracle.com/orawsv/WSDLTEST/TESTPROC/GETPURCHASEORDER" elementFormDefault="qualified">
<xsd:import xmlns:xsd="http://www.w3.org/2001/XMLSchema" namespace="http://xmlns.example.com/xsd/purchaseOrder" schemaLocation="/sys/schemas/WSDLTEST/xsd/
purchaseOrder.xsd"/>
<xsd:element name="CXMLTYPE-GETPURCHASEORDERInput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="P_REFERENCE-VARCHAR2-IN" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GETPURCHASEORDEROutput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="RETURN">
<xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:sequence>
<xsd:element xmlns:po="http://xmlns.example.com/xsd/purchaseOrder" ref="po:PurchaseOrder"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
<message name="GETPURCHASEORDERInputMessage">
<part name="parameters" element="tns:CXMLTYPE-GETPURCHASEORDERInput"/>
</message>
<message name="GETPURCHASEORDEROutputMessage">
<part name="parameters" element="tns:GETPURCHASEORDEROutput"/>
</message>
<portType name="GETPURCHASEORDERPortType">
<operation name="GETPURCHASEORDER">
<input message="tns:GETPURCHASEORDERInputMessage"/>
<output message="tns:GETPURCHASEORDEROutputMessage"/>
</operation>
</portType>
<binding name="GETPURCHASEORDERBinding" type="tns:GETPURCHASEORDERPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GETPURCHASEORDER">
<soap:operation soapAction="GETPURCHASEORDER"/>
<input>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body parts="parameters" use="literal"/>
</output>
</operation>
</binding>
<service name="GETPURCHASEORDERService">
<documentation>Oracle Web Service</documentation>
<port name="GETPURCHASEORDERPort" binding="tns:GETPURCHASEORDERBinding">
<soap:address location="http://localhost:80/orawsv/WSDLTEST/TESTPROC/GETPURCHASEORDER"/>
</port>
</service>
</definitions>
Elapsed: 00:00:00.11
SQL> BEGIN
2 :URL := 'http://&USERNAME:&PASSWORD@localhost:' || dbms_xdb.getHttpPort() || '/orawsv/&USERNAME/TESTPROC/EXPANDWSDL';
3 end;
4 /
old 2: :URL := 'http://&USERNAME:&PASSWORD@localhost:' || dbms_xdb.getHttpPort() || '/orawsv/&USERNAME/TESTPROC/EXPANDWSDL';
new 2: :URL := 'http://WSDLTEST:WSDLTEST@localhost:' || dbms_xdb.getHttpPort() || '/orawsv/WSDLTEST/TESTPROC/EXPANDWSDL';
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.00
SQL> print url
http://WSDLTEST:WSDLTEST@localhost:80/orawsv/WSDLTEST/TESTPROC/EXPANDWSDL
SQL> --
SQL> set serveroutput on
SQL> --
SQL> VAR WSDL_TEXT CLOB
SQL> --
SQL> DECLARE
2 V_SOAP_REQUEST XMLTYPE := XMLTYPE(
3 '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
4 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
7 <SOAP-ENV:Body>
8 <m:CXMLTYPE-EXPANDWSDLInput xmlns:m="http://xmlns.oracle.com/orawsv/WSDLTEST/TESTPROC"/>
9 </SOAP-ENV:Body>
10 </SOAP-ENV:Envelope>');
11 V_SOAP_REQUEST_TEXT CLOB := V_SOAP_REQUEST.getClobVal();
12 V_REQUEST UTL_HTTP.REQ;
13 V_RESPONSE UTL_HTTP.RESP;
14 V_BUFFER VARCHAR2(1024);
15 V_RESPONSE_TEXT CLOB;
16 V_RESPONSE_XML XMLTYPE;
17 V_WSDL XMLTYPE;
18 BEGIN
19 DBMS_LOB.CREATETEMPORARY(V_RESPONSE_TEXT, TRUE);
20
21 begin
22 V_REQUEST := UTL_HTTP.BEGIN_REQUEST(URL => :URL, METHOD => 'POST');
23 UTL_HTTP.SET_HEADER(V_REQUEST, 'User-Agent', 'Mozilla/4.0');
24 V_REQUEST.METHOD := 'POST';
25 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'Content-Length', VALUE => DBMS_LOB.GETLENGTH(V_SOAP_REQUEST_TEXT));
26 UTL_HTTP.WRITE_TEXT (R => V_REQUEST, DATA => V_SOAP_REQUEST_TEXT);
27 V_RESPONSE := UTL_HTTP.GET_RESPONSE(V_REQUEST);
28 LOOP
29 UTL_HTTP.READ_LINE(V_RESPONSE, V_BUFFER, TRUE);
30 DBMS_LOB.WRITEAPPEND(V_RESPONSE_TEXT,LENGTH(V_BUFFER),V_BUFFER);
31 END LOOP;
32 UTL_HTTP.END_RESPONSE(V_RESPONSE);
33 EXCEPTION
34 WHEN UTL_HTTP.END_OF_BODY THEN
35 UTL_HTTP.END_RESPONSE(V_RESPONSE);
36 END;
37
38 V_RESPONSE_XML := XMLTYPE(V_RESPONSE_TEXT);
39
40 select XMLQUERY
41 (
42 'declare namespace SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"; (::)
43 declare namespace SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"; (::)
44 declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance"; (::)
45 declare namespace xsd="http://www.w3.org/2001/XMLSchema"; (::)
46 declare namespace m="http://xmlns.oracle.com/orawsv/WSDLTEST/TESTPROC"; (::)
47 $resp/SOAP-ENV:Envelope/SOAP-ENV:Body/m:EXPANDWSDLOutput/m:RETURN/*'
48 passing V_RESPONSE_XML as "resp" returning content
49 )
50 into V_WSDL
51 from DUAL;
52
53 select V_WSDL.getClobVal()
54 into :WSDL_TEXT
55 from dual;
56
57 DBMS_LOB.FREETEMPORARY(V_RESPONSE_TEXT);
58
59 END;
60 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.10
SQL> --
SQL> set pages 0 lines 160 long 10000
SQL> column WSDL format A160
SQL> --
SQL> select xmlserialize(document XMLTYPE(:WSDL_TEXT) as CLOB indent size=2) WSDL
2 from dual
3 /
<definitions name="GETPURCHASEORDER" targetNamespace="http://xmlns.oracle.com/orawsv/WSDLTEST/TESTPROC/GETPURCHASEORDER" xmlns="http://schemas.xmlsoap.org/wsdl/
" xmlns:tns="http://xmlns.oracle.com/orawsv/WSDLTEST/TESTPROC/GETPURCHASEORDER" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.
org/wsdl/soap/">
<types>
<xsd:schema targetNamespace="http://xmlns.oracle.com/orawsv/WSDLTEST/TESTPROC/GETPURCHASEORDER" elementFormDefault="qualified">
<xsd:import xmlns:xsd="http://www.w3.org/2001/XMLSchema" namespace="http://xmlns.example.com/xsd/purchaseOrder" schemaLocation="/sys/schemas/WSDLTEST/xsd/
purchaseOrder.xsd"/>
<xsd:element name="CXMLTYPE-GETPURCHASEORDERInput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="P_REFERENCE-VARCHAR2-IN" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GETPURCHASEORDEROutput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="RETURN">
<xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:sequence>
<xsd:element xmlns:po="http://xmlns.example.com/xsd/purchaseOrder" ref="po:PurchaseOrder"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
<message name="GETPURCHASEORDERInputMessage">
<part name="parameters" element="tns:CXMLTYPE-GETPURCHASEORDERInput"/>
</message>
<message name="GETPURCHASEORDEROutputMessage">
<part name="parameters" element="tns:GETPURCHASEORDEROutput"/>
</message>
<portType name="GETPURCHASEORDERPortType">
<operation name="GETPURCHASEORDER">
<input message="tns:GETPURCHASEORDERInputMessage"/>
<output message="tns:GETPURCHASEORDEROutputMessage"/>
</operation>
</portType>
<binding name="GETPURCHASEORDERBinding" type="tns:GETPURCHASEORDERPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GETPURCHASEORDER">
<soap:operation soapAction="GETPURCHASEORDER"/>
<input>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body parts="parameters" use="literal"/>
</output>
</operation>
</binding>
<service name="GETPURCHASEORDERService">
<documentation>Oracle Web Service</documentation>
<port name="GETPURCHASEORDERPort" binding="tns:GETPURCHASEORDERBinding">
<soap:address location="http://localhost:80/orawsv/WSDLTEST/TESTPROC/GETPURCHASEORDER"/>
</port>
</service>
</definitions>
Elapsed: 00:00:00.03
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
C:\xdb\examples\DBNWS> -
Exposing Web Services as Callable Objects
Hello!
I have SAP NetWeaver 04s SP7. How can I expose Web Services as Callable Objects?
According to "Exposing Web Services as Callable Objects" (http://help.sap.com/saphelp_nw2004s/helpdata/en/44/4758351fcb1193e10000000a155369/frameset.htm), I should start with choosing type of CO "Service -> Web Service".
Actually, I haven't this entry in CO type list!
According to integrate Web Services with GP, this type appeared in SP8. What are the alternatives in SP7?
"Background execution" and "External service" seem to be the best candidates...
What is the best solution?
Thanx in advance!Hello, Jan!
I have SAP NWDS 7.0.07, and I cannot find there an option to create a CAF project. I can create Web service, EJB, Web DynPro, and something else - but not a CAF project. In documentation I did not find the connection points between NWDS and External Services, except some plug-ins.
Maybe I've misunderstood you, sorry - I'm a newbie in SAP
Actually, I've made a simple EJB, created a Web service from it, and deployed the WS to portal. Maybe, EJB instead of Web service can be somehow used in CAF?
I've tried to create a CO of type Composite Application Service, but there was necessary to configure endpoint aliases. I've read the manual "Configuring Endpoint Aliases", but didn't succeed to make one for EJB remote call... I've defined the name, URL (http://<host_of_portal>:<portal_port>), user and pwd - but I've got an exception when tried to use the created alias:
com.sap.caf.core.gp.servicelocator.exception.MetaModelBrowserException: Exception while trying to get InitialContext. at com.sap.caf.core.gp.servicelocator.CAFMetaModelBrowser.getAllApplications(CAFMetaModelBrowser.java:77) at com.sap.caf.core.gp.ui.backgroundco.admin.VSelect.browseCAFCore(VSelect.java:305) at com.sap.caf.core.gp.ui.backgroundco.admin.VSelect.onActionSelectEptAlias(VSelect.java:750) at com.sap.caf.core.gp.ui.backgroundco.admin.wdp.InternalVSelect.wdInvokeEventHandler(InternalVSelect.java:287) at com.sap.tc.webdynpro.progmodel.generation.DelegatingView.invokeEventHandler(DelegatingView.java:87) at com.sap.tc.webdynpro.progmodel.controller.Action.fire(Action.java:67) at
Maybe, the easiest way is to upgrade the versions of SAP and NWDS?
Are there some manuals that could provide me some help about:
1) creating CAS from the deployed Web service (from its creation in NWDS till its use in CAF, step-by-step)
2) binding Web Dynpro apps and Web services, using CAF and GP.
Or maybe I should attend SAP courses?
I have SAP NetWeaver 04s SP7 and NWDS ver. 7.0.07.
Sorry for the messy post, I did my best
Message was edited by:
Kirill Shepitko -
Process Web Services and BPM Objects
Hi,
I try to expose a web service for a specific process (not PAPI-WS) for process creation. Works well but only if I use only simple types like String, etc. as input arguments. But when I try to use an BPM object, I get an error like 'Undefined variable 'arg1''.
So, is it not possible to use such a process web service using BPM objects as arguments?
Regards
MatthiasYes it's true but Netbeans uses one of the existing SOAP implementations to do it. I'm almost sure that it uses one of the most popular implementations JAX-WS RI or Axis by default.
Regards,
Sławomir Wojtasiak -
Native web service - min occurs restriction of fields
Greetings,
I'm using native web services to expose a store procedure as a web service. The store procedure uses an object as an input parameter as I need to expose a complex nested structure. However all the fields from that object as exposed as mandatory in the generated WSDL file as no min-max occurs restriction is applied.
My question is, is there any way to modify that generated web service in order to set some of those fields as optional? (the generated xsd should have a min occurs = 0 restriction for those fields).
Thanks in advance.Hi,
Actually, I have a table with three columns and four rows.
My webservice's response is a list of users containing four informations for each user (login, name, email and division). Each information is binding to one case of the second column.
For example if the list is :
first response
User1 = apink, alex pink, apink@..., 5
User2 = tblue, tony blue, tblue@..., 5
My table will look like this :
column one | column two | column three
apink
alex pink
apink@...
5
tblue
tony blue
tblue@...
5
which is what i want. But I want that if I call the web service again with a different parameter a new table will be created and the old will be still here like this :
second response
User1 = kvarsen, Kyle varsen, kvarsen@..., 5
User2 = someone, some one, sone@..., 5
column one | column two | column three
apink
alex pink
apink@...
5
tblue
tony blue
tblue@...
5
column one | column two | column three
kvarsen
kyle varsen
kvarsen@...
5
someone
some one
sone@...
5
I hope to have been clear.
Thanks for your help -
Invoke sql 2005 native web services
Dear all,
I am trying to invoke from sap ecc 6.0 a native web services written in sql 2005.
For instance the web service path is something like http://10.1.0.197:8080/EmployeeXml?wsdl .
The web method is GetEmployeesXml
If I try to consume via custom .net application, it works but when I try to do the same in sap
following this guide
http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/802edea6-274e-2e10-fd95-e5e1a8bc0892?QuickLink=index&overridelayout=true
I get the error http not supported.
The differnce between an asp.net web services (where everythings works) and this one is regarding the autentication.
For the first one it is possible to specify anonymous login for second it is necessary to specify the username and password.
I kindly ask you to give any help to solve this issue, or is there a manual for sm59?
Thank you very muchTry with the following:
<xsd:complexType name="SqlResultStream">
<xsd:sequence>
<xsd:element name="SqlRowSet" type="sqlsoaptypes:SqlRowSet" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="SqlXml" type="sqlsoaptypes:SqlXml" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="SqlMessage" type="sqlmessage:SqlMessage" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="SqlRowCount" type="sqlrowcount:SqlRowCount" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="SqlResultCode" type="sqlsoaptypes:SqlResultCode" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="SqlTransaction" type="sqltransaction:SqlTransaction" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
You also have to know that this is not a perfect equivalent, as no tag can replace the xsd:choice. The xsd:choice means that only one of the elements can occur, while in xsd:sequence any of the elements can occur. But you should be able to achieve the same with a properly built mapping: create only one of the fields, and leave the rest empty - this is possible thanks to minOccurs="0".
Hope this helps,
Greg -
SOAP Fault when returning null from a Native Web Service Stored Procedure
I have a stored procedure which I can successfully invoke via soapUI
However, if one of the Stored Procedure's OUT arguments is set to null the native web service returns the following fault :
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Error processing input</faultstring>
<detail>
<OracleErrors xmlns="http://xmlns.oracle.com/orawsv/faults">
<OracleError>
<ErrorNumber>ORA-19202</ErrorNumber>
<Message>Error occurred in XML processing</Message>
</OracleError>
<OracleError>
<ErrorNumber>ORA-01405</ErrorNumber>
<Message>fetched column value is NULL</Message>
</OracleError>
</OracleErrors>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>I can see how to control the processing of null values when invoking orawsv (using the null_handling element).
Is there an equivalent for Stored Procedures ?
Thanks,
PD
versions as follows :
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
"CORE 11.2.0.1.0 Production"
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - ProductionWithout going into any technical discussion about the code, my first question is what JDK version was used to create this which was imported into the form? Understand that Forms 10 runs on JDK 1.4.2, so if you used any newer JDK version, likely there will be problems.
-
Binding xml from web service to java objects
I would appreciate if someone can tell me where can i get information regarding
binding of xml from web service to java objects in weblogic 6.1 .
Thanks,
agHi Ag,
To my knowledge, the only information on this topic is whatever you find in the
documentation. What exactly do you want to know?
Can you post a set of specific questions?
Regards,
Mike Wooten
"ag" <[email protected]> wrote:
>
I would appreciate if someone can tell me where can i get information
regarding
binding of xml from web service to java objects in weblogic 6.1 .
Thanks,
ag -
Apex, Web Services, and complex data types?
Hi all,
I was wondering if somebody could explain to me what sort of support apex has for using web services with complex data types, and how data returned like this could be interpreted and stored in the database.
Any help would be aprreciated.
Thankyou in advanceHi can anyone help me with this?
-
Recommended steps to generate a web service using nested complex types
Hello,
I need to generate a web service that uses nested complex types with built in types on the bottom layer. I hve posted an attempt at a WSDL. Please give advice on if I am doing it correctly.
I have the suspicion that I should nest the complex types into the final complex type VendorStockingInterface. Please confirm.
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:conv="http://www.openuri.org/2002/04/soap/conversation/"
xmlns:cw="http://www.openuri.org/2002/04/wsdl/conversation/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:jms="http://www.openuri.org/2002/04/wsdl/jms/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:s0="http://www.openuri.org/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
targetNamespace="http://www.openuri.org/">
<types>
<s:schema targetNamespace="http://www.openuri.org/"
xmlns:s="http://www.w3.org/2001/XMLSchema">
<s:element name="RegisterServiceRequest">
<s:complexType>
<s:sequence>
<s:element name="DeviceCapabilities">
<s:complexType>
<s:sequence>
<s:element name="OSName" type="s:string" nillable="true"/>
<s:element name="OSVersion" type="s:string" nillable="true"/>
<s:element name="BRType" type="s:string" nillable="true"/>
<s:element name="DisplayColors" type="s:string" nillable="true"/>
<s:element name="DisplayTechnology" type="s:string" nillable="true"/>
<s:element name="NetworkAccess" type="s:boolean" nillable="true"/>
<s:element name="DownloadMethod" type="s:string" nillable="true"/>
<s:element name="DownloadVersion" type="s:string" nillable="true"/>
<s:element name="Protocols" type="s:string" nillable="true"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="LicenseType">
<s:complexType>
<s:sequence>
<s:element name="Licences" type="s:string" nillable="false"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="PriceValue">
<s:complexType>
<s:sequence>
<s:element name="Value" type="s:float" nillable="false"/>
<s:element name="CurrencyType" type="s:string" nillable="false"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="RevenueModelType">
<s:complexType>
<s:sequence>
<s:element name="VSRP" type="RegisterServiceRequest:PriceValue" nillable="true"/>
<s:element name="WholesalePrice" type="RegisterServiceRequest:PriceValue" nillable="true"/>
<s:element name="VendorSplitPercentage" type="s:float" nillable="true"/>
<s:element name="VendorPurchasePrice" type="RegisterServiceRequest:PriceValue" nillable="true"/>
<s:element name="License" type="RegisterServiceRequest:LicenseType" nillable="false"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="VendorItemIdentifierType">
<s:complexType>
<s:sequence>
<s:element name="VendorProductDisplay" type="s:string" nillable="false"/>
<s:element name="VendorProductVersion" type="s:string" nillable="false"/>
<s:element name="VendorProductCode" type="s:string" nillable="false"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="VendorBriefType">
<s:complexType>
<s:sequence>
<s:element name="VendorID" type="s:string" nillable="false"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="VendorItemBriefType">
<s:complexType>
<s:sequence>
<s:element name="VendorProductID" type="RegisterServiceRequest:VendorItemIdentifierType" nillable="false"/>
<s:element name="VendorID" type="RegisterServiceRequest:VendorBriefType" nillable="false"/>
<s:element name="VendorDescription" type="s:string" nillable="true"/>
<s:element name="VendorPricing" type="RegisterServiceRequest:RevenueModelType" nillable="false"/>
<s:element name="DownloadURL" type="s:string" nillable="true"/>
<s:element name="ShortCode" type="s:string" nillable="true"/>
<s:element name="ApplicationCode" type="s:string" nillable="true"/>
<s:element name="DRMMethod" type="s:string" nillable="true"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ContentType">
<s:complexType>
<s:sequence>
<s:element name="Categorization" type="s:string" nillable="false"/>
<s:element name="MIMEType" type="s:string" nillable="true"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="VendorStockingInterface">
<s:complexType>
<s:sequence>
<s:element name="VendorItemInfo" type="RegisterServiceRequest:VendorItemBriefType" nillable="false"/>
<s:element name="ProductType" type="RegisterServiceRequest:ContentType" nillable="false"/>
<s:element name="DeviceRequirements" type="RegisterServiceRequest:DeviceCapabilitiesType" nillable="true"/>
<s:element name="VendorPricing" type="RegisterServiceRequest:RevenueModelType" nillable="false"/>
<s:element name="ProgramMemory" type="s:int" nillable="true"/>
<s:element name="DataMemory" type="s:int" nillable="true"/>
<s:element name="Author" type="s:string" nillable="true"/>
<s:element name="Language" type="s:string" nillable="true"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="RegisterServiceResponse">
<s:complexType>
<s:sequence>
<s:element name="Message" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</types>
<message name="RegisterServiceSoapIn">
<part name="parameters" element="s0:RegisterServiceRequest"/>
</message>
<message name="RegisterServiceSoapOut">
<part name="parameters" element="s0:RegisterServiceResponse"/>
</message>
<portType name="RegisterServiceSoap">
<operation name="RegisterService">
<input message="s0:RegisterServiceSoapIn"/>
<output message="s0:RegisterServiceSoapOut"/>
</operation>
</portType>
<binding name="RegisterServiceSoap" type="s0:RegisterServiceSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="RegisterService">
<soap:operation soapAction="http://www.openuri.org/RegisterService" style="document"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="RegisterService">
<port name="RegisterServiceSoap" binding="s0:RegisterServiceSoap">
<soap:address location="http://localhost:7001/RegisterService.jws"/>
</port>
</service>
</definitions>
I'd like the the consumer of the web service to send it a document with the fields formatted to the VendorInterface complextype which contains the other complextypes. In return the consumer will get another document with some acknowledgement messages.
To make this happen I'd like to generate the web service, creating the complex type classes and XMLBeans. I'd like advice on the steps to take once I get a good WSDL.
There is also the option to go from the other direction. Is it better to attempt to create a schema XSD document instead and use that to work towards the web service and WSDL? If so, could someone give an example of how to format an XSD using my example needs.I think I have got it all in place, though I have not tested it as of yet. For others who are looking at this, here is my XSD file from which all my complextypes were generated and lastly here is the actual web service file.
?xml version="1.0"?>
<xs:schema targetNamespace="http://openuri.org/RegisterService"
xmlns:rs="http://openuri.org/RegisterService"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:tns="http://temp.openuri.org/VerizonBOBO/RegisterServiceRequestDocument.xsd">
<xs:element name="RegisterServiceRequest" type="rs:VendorStockingInterface"/>
<xs:complexType name="DeviceCapabilitiesType">
<xs:sequence>
<xs:element name="OSName" type="xs:string" nillable="true"/>
<xs:element name="OSVersion" type="xs:string" nillable="true"/>
<xs:element name="BRType" type="xs:string" nillable="true"/>
<xs:element name="DisplayColors" type="xs:string" nillable="true"/>
<xs:element name="DisplayTechnology" type="xs:string" nillable="true"/>
<xs:element name="NetworkAccess" type="xs:boolean" nillable="true"/>
<xs:element name="DownloadMethod" type="xs:string" nillable="true"/>
<xs:element name="DownloadVersion" type="xs:string" nillable="true"/>
<xs:element name="Protocols" type="xs:string" nillable="true"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LicenseType">
<xs:sequence>
<xs:element name="Licences" type="xs:string" nillable="false"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PriceValue">
<xs:sequence>
<xs:element name="Value" type="xs:float" nillable="false"/>
<xs:element name="CurrencyType" type="xs:string" nillable="false"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="RevenueModelType">
<xs:sequence>
<xs:element name="VSRP" type="rs:PriceValue" nillable="true"/>
<xs:element name="WholesalePrice" type="rs:PriceValue" nillable="true"/>
<xs:element name="VendorSplitPercentage" type="xs:float" nillable="true"/>
<xs:element name="VendorPurchasePrice" type="rs:PriceValue" nillable="true"/>
<xs:element name="License" type="rs:LicenseType" nillable="false"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="VendorItemIdentifierType">
<xs:sequence>
<xs:element name="VendorProductDisplay" type="xs:string" nillable="false"/>
<xs:element name="VendorProductVersion" type="xs:string" nillable="false"/>
<xs:element name="VendorProductCode" type="xs:string" nillable="false"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="VendorBriefType">
<xs:sequence>
<xs:element name="VendorID" type="xs:string" nillable="false"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="VendorItemBriefType">
<xs:sequence>
<xs:element name="VendorProductID" type="rs:VendorItemIdentifierType" nillable="false"/>
<xs:element name="VendorID" type="rs:VendorBriefType" nillable="false"/>
<xs:element name="VendorDescription" type="xs:string" nillable="true"/>
<xs:element name="VendorPricing" type="rs:RevenueModelType" nillable="false"/>
<xs:element name="DownloadURL" type="xs:string" nillable="true"/>
<xs:element name="ShortCode" type="xs:string" nillable="true"/>
<xs:element name="ApplicationCode" type="xs:string" nillable="true"/>
<xs:element name="DRMMethod" type="xs:string" nillable="true"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ContentType">
<xs:sequence>
<xs:element name="Categorization" type="xs:string"/>
<xs:element name="MIMEType" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="VendorStockingInterface">
<xs:sequence>
<xs:element name="VendorItemInfo" type="rs:VendorItemBriefType"/>
<xs:element name="ProductType" type="rs:ContentType"/>
<xs:element name="DeviceRequirements" type="rs:DeviceCapabilitiesType"/>
<xs:element name="VendorPricing" type="rs:RevenueModelType"/>
<xs:element name="ProgramMemory" type="xs:int"/>
<xs:element name="DataMemory" type="xs:int"/>
<xs:element name="Author" type="xs:string"/>
<xs:element name="Language" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="RegisterServiceResponse">
<xs:sequence>
<xs:element name="Message" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
The Web Service File:
import org.openuri.registerService.RegisterServiceResponse;
import org.openuri.registerService.RegisterServiceRequestDocument;
import com.verizon.hp.registerservice.*;
public class RegisterService implements com.bea.jws.WebService
static final long serialVersionUID = 1L;
* @common:operation
* @jws:protocol form-post="false" form-get="false"
public org.openuri.registerService.RegisterServiceResponse RegisterService(org.openuri.registerService.RegisterServiceRequestDocument RegisterServiceDoc)
VendorStockingInterface vsInterface = (VendorStockingInterface)RegisterServiceDoc.getRegisterServiceRequest();
System.out.println(vsInterface.toString());
com.verizon.hp.registerservice.RegisterServiceResponse serviceResponse = new com.verizon.hp.registerservice.RegisterServiceResponse();
serviceResponse.setMessage("Register New Service Message has been received successfully");
org.openuri.registerService.RegisterServiceResponse response = (org.openuri.registerService.RegisterServiceResponse)serviceResponse;
return response;
} -
Database Native web services - load balancing, Instrumentation , security
Hello –
I’m proposing use of Database Native web service in our company. Our architects are asking following questions so appreciate your help
a. How do you load balance across the DB WS (is there a way to use the F5 to detect downtime and balance the load across the DB servers)? We will be using RAC configuration with 3 nodes.
b. Our architect have security concern as user id/password information are in the web service URL, which may prove to be an issue. Is there a way to mitigate this risk?
c. Instrumentation in this approach (db native services) is questionable due to development/auto gen of the service logic from the DB itself. We may investigate wrapping the services with OSB to give us an additional instrumentation, policy enforcement, endpoint mediation and security proxy. Thoughts??
d. Architect are curious regarding any potential performance issues this may have on the DB server.
ThanksHi
We've recently begun using Native Web Services, intending to roll out this approach across the enterprise, but we've encountered 2 significant problems so far, which you may want to consider before proceeding ...
1. NWS returns an exception if the underlying PL/SQL returns a null value - even if the PL/SQL has completed successfully, and null is a legitimate return value (see SR 3-6201969101 - it contains simple instructions to recreate the problem)
(I raised it in this forum but there were no replies - SOAP Fault when returning null from a Native Web Service Stored Procedure
2. The sequence of values returned in the NWS response message is the opposite to the sequence declared in the auto-generated wsdl - i.e. schema validation will fail (see SR 3-6209016991 - it also contains simple instructions to replicate)
We have coded a workaround for problem 1. where we return <EMPTY> in place of null, and check for it in the client, but without proper resolution we're not prepared to use NWS elsewhere
As a workaround for problem 2. we removed schema validation, again not ideal
Both SRs were escalated 9 days ago, but are still outstanding
Incidentally our database is 11.2.0.1, but I've tested on 11.2.0.3 and both problems are still present
We also wrap the NWS services using an OSB Proxy Service, and came across the same security issue that you describe (b) - to provide the credentials required for the NWS, simply create a Service Account (containing the credentials) inside OSB and attach it to the Business Service which invokes the NWS (http://docs.oracle.com/cd/E17904_01/doc.1111/e15867/service_accounts.htm)
HTH
Maybe you are looking for
-
Function module to input dates
Hi All, Require function module where i can input From Date and To Dates as input parameters. This should appear as a dialog box.
-
New requirement in Subcontracting process
Hi All, There is a requirement related to indian excise, in Subcontracting process is it possible to merge below 2 steps 1)transfer posting to vendor stock and 2)creating subcontracting challan That mean to say SC challan has to be created for some q
-
Top 3 customers group by product in OBIEE
Hi, Can somebody assist me how can I display a report in oracle Bi answers consisting of three columns called Product, Customer and Revenue. In the report, I need to display Top 3 customers group by Product. How can I use the "group by" function in o
-
I want to read all <temp >nodes map them to some variable and create one more XML. I am stuck up in the first place itself where i need to read the data :( . I am getting null pointer exception, please find the code also. <?xml version="1.0" encoding
-
Dear All, May i know how to calcuate the moving average in B1? can i custom it or it is already set in the system that i cannot change it ? Many thanks!