Web Service Return XML
Hello,
I am trying to build a chart using web services.
I have a function like this
private function
dataRequestResultHandler(event:ResultEvent):void {
myData = event.result as String;
myXMLData = new XML(myData);
In the dataProvider
I am calling like this
<mx:LineChart name="visitors" dataProvider="{myData}"
id="chart" height="265" width="300">
<mx:horizontalAxis>
<mx:CategoryAxis dataProvider="{myData}"
categoryField="name" />
</mx:horizontalAxis>
However when I run the code, it gives error
faultcode: nosuchclientmethod
faultstring:couldn't find 'send' in service 'faultDetail
"null"
Any help is highly appreciable.
Thanks
Have you seen this video: http://download.oracle.com/otn_hosted_doc/jdeveloper/11gdemos/adf-service-integ/adf-service-integ.html
It explains how to integrate web services into your ADF applications. There are also some pretty good tutorials here: Oracle JDeveloper 11g Release 2 (11.1.2) Tutorials
One thing that will make the job easier is to create an XML schema for your returned data - the service provider may be able to give you an .XSD file for it, or you could download some typical results and JDeveloper can generate an XML Schema from XML. If you generate your schema, be sure to edit it and improve what the generator does - no generator is as good as human intelligence. (at least not yet ) Of course, if this is a SOAP web service, it will probably come with a WSDL which includes the XSD.
Similar Messages
-
Error while consuming Web Service (returning XML ) in ABAP
Hi,
i am trying to consume a web service in ABAP. ( webservice which takes a request and return a XML string back).
I created a proxy class in SE80. and i tested it successfully.
When i tried to use the class in my program, it is giving dump.
i am not sure what is the problem. I guess it is not able to handle null values in XML.if that is the case. how to handle it..The dump says:
Runtime Errors OBJECTS_OBJREF_NOT_ASSIGNED
Except. CX_SY_REF_IS_INITIAL
Error analysis
An exception occurred that is explained in detail below.
The exception, which is assigned to class 'CX_SY_REF_IS_INITIAL', was not
caught and
therefore caused a runtime error.
The reason for the exception is:
You attempted to use a 'NULL' object reference (points to 'nothing')
access a component (variable: "LO_CLIENTPROXY").
An object reference must point to an object (an instance of a class)
before it can be used to access components.
Either the reference was never set or it was set to 'NULL' using the
CLEAR statement.
I think this dump is because of the default value ( space) in some elements. How to avoide that.
wheni catch CX_SY_REF_IS_INITIAL it is not giving any dump. But this is not my requirement. Because it is not getting anything into response string. -
BUG: Web service returns request XML as response when result too large
Hi,
sorry for cross-posting, but the Web Services forum seems to be quite abandoned and this is an urgent issue for me.
I have a web service returning some records of a given type (created using JDeveloper 10.1.3.3). The running environment and the service implementation do not seem to make any difference, as the situation is the same whether running it in embedded OC4J or in AS 10.1.3.1, and whether it is generated from a PL/SQL procedure or a method of a plain Java class.
The problem is that if the result of this web service is too large (contains a lot of records), then the processing halts in some Oracle class in some web service library, so not in a debuggable generated web service source or in the service implementation itself.
I think that the XML processing halts because of a "java.lang.OutOfMemoryError: Java heap space".
Then a more serious problem follows: the service doesn't return a fault message but the original request XML as a response. Obviously, this can lead to some really unexpected errors.
To reproduce this error:
1. Create a Java class with a method returning an array of an arbitrary type, of the size specified in an input parameter.
2. Create a web service from this class.
3. Call it multiple times increasing the size parameter in every call until you get back the request as response or any error message.
For example:
- if you test the web service using the web page generated to access the endpoint, then you can see the response XML - in case you don't get an Internal Server Error (Java heap space).
- if you use a generated web service proxy for testing, then it will give an error saying "unexpected element name: expected={namespace}someOperationResponseElement
actual={namespace}someOperationElement".
Any ideas how to locate / solve this problem?
Regards,
PatrikPatrik,
the usual recommendation is to try with 10.1.3.3 instead of 10.1.3.1 to exclude you are hunting down an already fixed issue. From what you describe, the error seems less JDeveloper related than OC4J or OracleAs.
So in case it reproduces in 10.1.3.3 I suggest to create a testcase and open a service request with support, or try the OC4J forum in case its known there.
Frank -
What happens when a OUT parameter of a web-service returns an empty string
Hi,
Any idea on how to deal with the situation when a web-service returns an empty string
I get the following System Exception:-
Caused by: java.lang.AssertionError: Attempt to set empty javaType to ticketResponse(out,0) :: fuego.type.FuegoClass$LazyRef@6770f2. It must be null or a valid java type.
It therefore either expects a null value or a valid java type...
Since it goes into a system exception, the activity is not completed and nothing is inserted into the web-service..
How do we resolve this error inside of BPM?Thanks Ben for your replies.
Before I attempt changing a VI that was written by a client and make a total mess of it, there's something I'd like to point out.
I tried the re-entrant VI approach and that didn't go any further than the VIT approach, and probably for the same reason(s).
The interesting part is that (with the VIT approach) the same VIT is called by another process and it works fine. It is just for the process that has it appear within 2 sub-panels. So the issue is related to having either having two instances spawn at once of the same VIT or it is related to the sub-panels. I think it is the two instances (or copies of the VIT) that causes LV to caugh...
So you are trying to tell me that the above description is accurate and it is because of the private methods...??...
How would I "wrap" those private methods into public ones? The seems to be a piece of this puzzle that I am not yet grasping..
Thanks for your patience and help.
RayR -
Invoking a web service returning a arraylist of custom type
Hi, I created a web service return a arraylist<InsertionSerialisable>.
InsertionSerialisable can't be simpler here it is:
public class InsertionSerialisable {
public String nom = null;
public String poids = null;
I'm trying to use this arraylist in bpel but the returned parameter of my parter link for this web service is item of type anyType and I can't access my nom and poids string member. In a bpel process how can access member of custom element into an arraylist<InsertionSerialisable>?
Here is my wsdl:
<definitions
name="ObtenirInsertions"
targetNamespace="http://expedierdocument/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://expedierdocument/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns0="http://www.oracle.com/webservices/internal/literal"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://expedierdocument/"
elementFormDefault="qualified" xmlns:tns="http://expedierdocument/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://www.oracle.com/webservices/internal/literal">
<import namespace="http://www.oracle.com/webservices/internal/literal"/>
<complexType name="InsertionSerialisable">
<sequence>
<element name="poids" type="string" nillable="true"/>
<element name="nom" type="string" nillable="true"/>
</sequence>
</complexType>
<element name="obtenirInsertions" type="tns:obtenirInsertions"/>
<complexType name="obtenirInsertions">
<sequence>
<element name="inExpInsPath" type="string" nillable="true"/>
<element name="inIdentificationLettre" type="string" nillable="true"/>
<element name="inSpecialite" type="string" nillable="true"/>
</sequence>
</complexType>
<element name="obtenirInsertionsResponse" type="tns:obtenirInsertionsResponse"/>
<complexType name="obtenirInsertionsResponse">
<sequence>
<element name="return" type="ns1:arrayList" nillable="true"/>
</sequence>
</complexType>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.oracle.com/webservices/internal/literal"
elementFormDefault="qualified" xmlns:tns="http://www.oracle.com/webservices/internal/literal"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/">
<import namespace="http://expedierdocument/"/>
<complexType name="arrayList">
<complexContent>
<extension base="tns:list">
<sequence/>
</extension>
</complexContent>
</complexType>
<complexType name="list">
<complexContent>
<extension base="tns:collection">
<sequence/>
</extension>
</complexContent>
</complexType>
<complexType name="collection">
<sequence>
<element name="item" type="anyType" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
</schema>
</types>
<message name="ObtenirInsertions_obtenirInsertions">
<part name="parameters" element="tns:obtenirInsertions"/>
</message>
<message name="ObtenirInsertions_obtenirInsertionsResponse">
<part name="parameters" element="tns:obtenirInsertionsResponse"/>
</message>
<portType name="ObtenirInsertions">
<operation name="obtenirInsertions">
<input message="tns:ObtenirInsertions_obtenirInsertions"/>
<output message="tns:ObtenirInsertions_obtenirInsertionsResponse"/>
</operation>
</portType>
<binding name="ObtenirInsertionsSoapHttp" type="tns:ObtenirInsertions">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="obtenirInsertions">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="ObtenirInsertions">
<port name="ObtenirInsertionsSoapHttpPort" binding="tns:ObtenirInsertionsSoapHttp">
<soap:address location="http://192.168.0.2:8888/Application1-ExpedierDocument-context-root/ObtenirInsertionsSoapHttpPort"/>
</port>
</service>
</definitions>
Thank you!Hi, I created a web service return a arraylist<InsertionSerialisable>.
InsertionSerialisable can't be simpler here it is:
public class InsertionSerialisable {
public String nom = null;
public String poids = null;
I'm trying to use this arraylist in bpel but the returned parameter of my parter link for this web service is item of type anyType and I can't access my nom and poids string member. In a bpel process how can access member of custom element into an arraylist<InsertionSerialisable>?
Here is my wsdl:
<definitions
name="ObtenirInsertions"
targetNamespace="http://expedierdocument/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://expedierdocument/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns0="http://www.oracle.com/webservices/internal/literal"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://expedierdocument/"
elementFormDefault="qualified" xmlns:tns="http://expedierdocument/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://www.oracle.com/webservices/internal/literal">
<import namespace="http://www.oracle.com/webservices/internal/literal"/>
<complexType name="InsertionSerialisable">
<sequence>
<element name="poids" type="string" nillable="true"/>
<element name="nom" type="string" nillable="true"/>
</sequence>
</complexType>
<element name="obtenirInsertions" type="tns:obtenirInsertions"/>
<complexType name="obtenirInsertions">
<sequence>
<element name="inExpInsPath" type="string" nillable="true"/>
<element name="inIdentificationLettre" type="string" nillable="true"/>
<element name="inSpecialite" type="string" nillable="true"/>
</sequence>
</complexType>
<element name="obtenirInsertionsResponse" type="tns:obtenirInsertionsResponse"/>
<complexType name="obtenirInsertionsResponse">
<sequence>
<element name="return" type="ns1:arrayList" nillable="true"/>
</sequence>
</complexType>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.oracle.com/webservices/internal/literal"
elementFormDefault="qualified" xmlns:tns="http://www.oracle.com/webservices/internal/literal"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/">
<import namespace="http://expedierdocument/"/>
<complexType name="arrayList">
<complexContent>
<extension base="tns:list">
<sequence/>
</extension>
</complexContent>
</complexType>
<complexType name="list">
<complexContent>
<extension base="tns:collection">
<sequence/>
</extension>
</complexContent>
</complexType>
<complexType name="collection">
<sequence>
<element name="item" type="anyType" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
</schema>
</types>
<message name="ObtenirInsertions_obtenirInsertions">
<part name="parameters" element="tns:obtenirInsertions"/>
</message>
<message name="ObtenirInsertions_obtenirInsertionsResponse">
<part name="parameters" element="tns:obtenirInsertionsResponse"/>
</message>
<portType name="ObtenirInsertions">
<operation name="obtenirInsertions">
<input message="tns:ObtenirInsertions_obtenirInsertions"/>
<output message="tns:ObtenirInsertions_obtenirInsertionsResponse"/>
</operation>
</portType>
<binding name="ObtenirInsertionsSoapHttp" type="tns:ObtenirInsertions">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="obtenirInsertions">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="ObtenirInsertions">
<port name="ObtenirInsertionsSoapHttpPort" binding="tns:ObtenirInsertionsSoapHttp">
<soap:address location="http://192.168.0.2:8888/Application1-ExpedierDocument-context-root/ObtenirInsertionsSoapHttpPort"/>
</port>
</service>
</definitions>
Thank you! -
Web Service returning JCO.Table with no content
Hello all,
I've written a web service returning an object of type JCO.Table
When I'm testing it in the Web Service Navigator the response contains two parameters: tabLength and row (current row number), but doesn't contain the content of the table.
I tried testing the Web Service also from Webdynpro but its the same -
the result contains a ComplexTypeJCOTable and from that object I can only get the tabLength and row.
Anyone knows why is it happening?
Thanks for your help, Adi.Hi Rajendrakumar Gaikwad,
Thanks for your suggestion.
I don't think this will be an efficient solution for me or for the web service clients.
I'm still looking for an explanation why can't I get the JCO.Table content.
Is it impossible for some reason or am I doing anything wrong?
Thanks again, Adi. -
Recently added to DCI's Corporate and e-Business Portals
Conference:
Databases, Portals, Web Services, and XML Integration Magic
When: July 29, 2001, 9:00 AM - 5:00 PM
Where: Hynes Convention Center, Boston
http://www.dci.com/brochure/porbos/seminars.aspRecently added to DCI's Corporate and e-Business Portals
Conference:
Databases, Portals, Web Services, and XML Integration Magic
When: July 29, 2001, 9:00 AM - 5:00 PM
Where: Hynes Convention Center, Boston
http://www.dci.com/brochure/porbos/seminars.asp -
PLSQL web service returning multiple records
Hello,
I am trying to create a web service using oracle 11g which should be able to return multiple records.
Based on hints and code samples found on the internet here is my code :
CREATE OR REPLACE TYPE test_rec is OBJECT (
s_nume_adre NUMBER ,
c_eta_civi VARCHAR2(4 BYTE),
l_nom1_comp VARCHAR2(40 BYTE),
l_nom2_comp VARCHAR2(40 BYTE),
l_nom3_comp VARCHAR2(40 BYTE),
l_pren_comp VARCHAR2(30 BYTE),
d_date_nais DATE);
CREATE OR REPLACE TYPE test_array AS TABLE OF test_rec;
CREATE OR REPLACE PACKAGE test_pkg AS
function get_rows(snume_adre in number) return test_array;
END;
CREATE OR REPLACE PACKAGE BODY test_pkg AS
function get_rows(snume_adre in number) return test_array is
v_rtn test_array := test_array(null);
v_first boolean := true;
cursor c_get_rows(snume_adre in number) is
SELECT a.s_nume_adre,
nvl(a.c_eta_civi, '') c_eta_civi,
nvl(a.l_nom1_comp, '') l_nom1_comp,
nvl(a.l_nom2_comp, '') l_nom2_comp,
nvl(a.l_nom3_comp, '') l_nom3_comp,
nvl(a.l_pren_comp, '') l_pren_comp,
nvl(a.d_date_nais, to_date('01.01.1900', 'dd.mm.yyyy')) d_date_nais
FROM bro.z45 a
where a.s_nume_adre = snume_adre or snume_adre is null;
begin
for rec in c_get_rows(snume_adre) loop
if v_first then
v_first := false;
else
v_rtn.extend;
end if;
v_rtn(v_rtn.last) := test_rec(rec.s_nume_adre, rec.c_eta_civi, rec.l_nom1_comp, rec.l_nom2_comp,
rec.l_nom3_comp, rec.l_pren_comp, rec.d_date_nais);
end loop;
return v_rtn;
end;
END;
--select * from table (test_pkg.get_rows(null));
I am able to retrieve the data using the select.
However when I try to access its wsdl I get an error :
<soap:Envelope>
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Error processing input</faultstring>
<detail>
<OracleErrors></OracleErrors>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
If I comment the function call in the package declaration I get a "correct" wsdl :
<definitions name="GET_ROWS" targetNamespace="http://xmlns.oracle.com/orawsv/TEST/TEST_PKG/GET_ROWS" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xmlns.oracle.com/orawsv/TEST/TEST_PKG/GET_ROWS" 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/TEST/TEST_PKG/GET_ROWS" elementFormDefault="qualified">
<xsd:element name="GET_ROWSInput">
<xsd:complexType>
</xsd:complexType>
</xsd:element>
<xsd:element name="GET_ROWSOutput">
<xsd:complexType>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
<message name="GET_ROWSInputMessage">
<part name="parameters" element="tns:GET_ROWSInput"/>
</message>
<message name="GET_ROWSOutputMessage">
<part name="parameters" element="tns:GET_ROWSOutput"/>
</message>
<portType name="GET_ROWSPortType">
<operation name="GET_ROWS">
<input message="tns:GET_ROWSInputMessage"/>
<output message="tns:GET_ROWSOutputMessage"/>
</operation>
</portType>
<binding name="GET_ROWSBinding" type="tns:GET_ROWSPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GET_ROWS">
<soap:operation soapAction="GET_ROWS"/>
<input>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body parts="parameters" use="literal"/>
</output>
</operation>
</binding>
<service name="GET_ROWSService">
<documentation>Oracle Web Service</documentation>
<port name="GET_ROWSPort" binding="tns:GET_ROWSBinding">
<soap:address location="http://server.domain.ch:8080/orawsv/TEST/TEST_PKG/GET_ROWS"/>
</port>
</service>
</definitions>
Any hint as how to create and access pl sql web service returning multiple rows?
I don't use java and don't have access to tools like JDeveloper.
Thanks!The actual issue is that collection types are not supported for return parameters.
The solution is to wrap the collection into another object.
Here's a working example based on your settings :
CREATE OR REPLACE TYPE test_rec is OBJECT (
empno number(4)
, ename varchar2(10)
, hiredate date
CREATE OR REPLACE TYPE test_array AS TABLE OF test_rec;
CREATE OR REPLACE TYPE test_array_wrapper is OBJECT ( arr test_array );
CREATE OR REPLACE PACKAGE test_pkg AS
function get_rows(p_deptno in number) return test_array_wrapper;
END;
CREATE OR REPLACE PACKAGE BODY test_pkg AS
function get_rows(p_deptno in number) return test_array_wrapper is
results test_array;
begin
select test_rec(empno, ename, hiredate)
bulk collect into results
from scott.emp
where deptno = p_deptno;
return test_array_wrapper(results);
end;
END;
The wsdl is then generated correctly :
SQL> select httpuritype('http://DEV:dev@localhost:8080/orawsv/DEV/TEST_PKG/GET_ROWS?wsdl').getxml() from dual;
HTTPURITYPE('HTTP://DEV:DEV@LOCALHOST:8080/ORAWSV/DEV/TEST_PKG/GET_ROWS?WSDL').GETXML()
<definitions name="GET_ROWS" targetNamespace="http://xmlns.oracle.com/orawsv/DEV/TEST_PKG/GET_ROWS" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xmlns.oracle.com/orawsv/DEV/TEST_PKG/GET_
ROWS" 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/DEV/TEST_PKG/GET_ROWS" elementFormDefault="qualified">
<xsd:element name="CTEST_ARRAY_WRAPPER-GET_ROWSInput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="P_DEPTNO-NUMBER-IN" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GET_ROWSOutput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="RETURN" type="tns:TEST_ARRAY_WRAPPERType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="TEST_ARRAY_WRAPPERType">
<xsd:sequence>
<xsd:element name="TEST_ARRAY_WRAPPER">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ARR">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TEST_REC" type="tns:TEST_REC_IntType" maxOccurs="unbounded" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="TEST_REC_IntType">
<xsd:sequence>
<xsd:element name="EMPNO" type="xsd:double"/>
<xsd:element name="ENAME">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="10"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="HIREDATE" type="xsd:date"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</types>
<message name="GET_ROWSInputMessage">
<part name="parameters" element="tns:CTEST_ARRAY_WRAPPER-GET_ROWSInput"/>
</message>
<message name="GET_ROWSOutputMessage">
<part name="parameters" element="tns:GET_ROWSOutput"/>
</message>
<portType name="GET_ROWSPortType">
<operation name="GET_ROWS">
<input message="tns:GET_ROWSInputMessage"/>
<output message="tns:GET_ROWSOutputMessage"/>
</operation>
</portType>
<binding name="GET_ROWSBinding" type="tns:GET_ROWSPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GET_ROWS">
<soap:operation soapAction="GET_ROWS"/>
<input>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body parts="parameters" use="literal"/>
</output>
</operation>
</binding>
<service name="GET_ROWSService">
<documentation>Oracle Web Service</documentation>
<port name="GET_ROWSPort" binding="tns:GET_ROWSBinding">
<soap:address location="http://localhost:8080/orawsv/DEV/TEST_PKG/GET_ROWS"/>
</port>
</service>
</definitions> -
Creating a web service - editing xml
does anyone know how to alter the values returned by a web service before the xml is returned to the caller?
What I mean by this is, I have a web service that returns data. If the data field has not been populated it simply passes back the field with its initial state e.g. space for char and zero for numeric etc.
Is it possible to alter these values so that the outbound return xml would contain null pointers in these cases. e.g. xsi:nil
For web service consumption the controller table allows ABAP to handle xsi:nil as the xml comes into the ABAP environment. Is there a similar protocol or class for the outbound/Web service that exists in SAP?
I can't find and user exits or BADI's in this area, but then again this is really on the boundary of the ABAP environment.
Any help would be appreciated.
Thanks,
AlanIf you have never done this before the best place to start is the axis user guide:
http://ws.apache.org/axis/java/user-guide.html
Work through the examples there and then google for examples of using WSDL2Java (there are many out there). This will generate client side classes for you and make things a bit easier.
C -
Calling Web Service passing xml from Oracle Forms
Hello,
I need to call a .net web service from Oracle Forms that passes in xml data and returns xml data.
I have seen several examples of how to create a wrapper in jdev and then to import the code
into forms. I just have not seen any examples that are passing parmameters especially not xml
as a parameter and that have an active wsdl that I can see how it relates to the code created.
I have a wrapper but cannot figure out where and what notation to use to include passing in
an xml object.
Does anyone have an example passing in xml where the wsdl is still available to see?'
Forms version 10.1.2.0.2. Jdev 10.1.3.4
Thanks,
Linda
Edited by: lboyce on Jan 5, 2009 2:30 PMAlso here you have several options...
1. you can make a PJC (bean) which include a webservice stub generated with axis (you can make a stub and also test a webservice with this tool: www.soapui.org)..
2. you can make a database webservice with JPublisher and then just call a pl/sql wrapper for this webservice
4. you can call a webservice with java api (HttpsURLConnection, HttpURLConnection or with apache HTTPClient api) from your PJC for example:
the code below is used as java stored procedure to call a .net webservice on https
====================================
public static int getPStopnja(String polica, String reg_oznaka,
String ime_osiguranika,
String naziv_osiguranika,
String leasing,
String[] doc) {
String l_polica="";
String l_reg_oznaka="";
String l_ime_osiguranika="";
String l_naziv_osiguranika="";
String l_leasing ="";
URL url = null;
HttpsURLConnection conn = null;
BufferedReader br = null;
String lineIn = null;
StringBuffer sb = new StringBuffer();
OutputStream os = null;
int rc = 0;
//kontrole
l_polica = polica==null ? "":polica;
l_reg_oznaka = reg_oznaka==null ? "": reg_oznaka;
l_ime_osiguranika = ime_osiguranika==null ? "": ime_osiguranika;
l_naziv_osiguranika = naziv_osiguranika==null ? "": naziv_osiguranika;
l_leasing = leasing==null ? "": leasing;
String body = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
body += "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"https://services.huo.hr/web_ao/\">";
body += "<soapenv:Header/>";
body += "<soapenv:Body>";
body += "<web:get_pstupanj>";
body += "<web:param_in>";
body += "<web:polica>"+l_polica+"</web:polica>";
body += "<web:reg_oznaka>"+l_reg_oznaka+"</web:reg_oznaka>";
body += "<web:ime_osiguranika>"+l_ime_osiguranika+"</web:ime_osiguranika>";
body += "<web:naziv_osiguranika>"+l_naziv_osiguranika+"</web:naziv_osiguranika>";
body += "<web:leasing>"+l_leasing+"</web:leasing>";
body += "</web:param_in>";
body += "</web:get_pstupanj>";
body += "</soapenv:Body>";
body += "</soapenv:Envelope>";
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("TLS");
X509TrustManager[] xtmArray = new X509TrustManager[|http://forums.oracle.com/forums/] { xtm };
sslContext.init(null, xtmArray, new java.security.SecureRandom());
} catch (GeneralSecurityException gse) {
doc[0] = gse.toString();
return -1;
if (sslContext != null) {
conn.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
try {
conn.setDefaultHostnameVerifier(hnv);
} catch (Exception ex) {
doc[0] = ex.toString();
return -1;
try {
URL st = new URL("https://services.huo.hr/web_ao/web_ao.asmx");
conn = (HttpsURLConnection)st.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Host", "services.huo.hr");
conn.setRequestProperty("Content-Length", "" + body.length());
conn.setRequestProperty("SOAPAction",
"\"https://services.huo.hr/web_ao/get_pstupanj\"");
conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
conn.setDoOutput(true);
OutputStreamWriter wr =
new OutputStreamWriter(conn.getOutputStream());
wr.write(body);
wr.flush();
BufferedReader in =
new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
sb.append(new String(inputLine.getBytes(),"UTF-8"));
in.close();
//System.out.println(new String(sb.toString().getBytes(),"ISO8559_2"));
doc[0] = sb.toString();
return 0;
} catch (Exception e) {
doc[0] = e.toString() + " ===> " + body + " ==>length= " + body.length();
return -1;
====================================
best regards
Edited by: Peterv6i on Jan 6, 2009 8:34 AM
Edited by: Peterv6i on Jan 6, 2009 8:40 AM -
Error 504 DNS look up failed while calling web services using XML
Hi, I am trying to call web service from Oracle using XML.
Everything seems to be in place but im getting an error "The webserver for <My End URL> reported that an error occurred while trying to access the website. Please click here to return to the previous page."
If I directly access the end url from my browser its accessible and seems to work fine.
The http response receiveed is mentioned below:
Status code: 403
Reason phrase: Forbidden
<html>
<head>
<title>504 DNS look up failed</title>
</head>
<body>
<font size=2><table width="100%"><tr><td bgcolor=#3300cc align="center" colspan=2>504 DNS look up failed</td></tr></table><br><br>The webserver for 'My End URL' reported that an error occurred while trying to access the website. Please click <u>here</u> to return to the previous page.<br><br><hr></font></body>
</html>
Im using Oracle 9i
Please help
Edited by: 927814 on Apr 15, 2012 11:41 PM
Edited by: 927814 on Apr 15, 2012 11:46 PMWithout far greater details as to what you are doing, what you have installed, and what you have tried, not much can be offered. All that I can gather from the information you provided is that the server name you are trying to contact either is not responding or is invalid. If you have Forms installed on your local machine (for example using Developer Suite), try using localhost rather than the hostname. For example, http://localhost:port/forms/frmservlet?form=yourform
http://www.checkupdown.com/status/E504.html -
I have a web service and I'm cfdumping the return variable, but I don't know how to get the value out. This is what it is giving me.
1
object of com.nextaxiom.www.soapservice.xsd1.APApprovalList
Class Name
com.nextaxiom.www.soapservice.xsd1.APApprovalList
Methods
Method
Return Type
equals(java.lang.Object)
boolean
getAlertDate()
java.lang.String
getDescription()
java.lang.String
getDeserializer(java.lang.String, java.lang.Class, javax.xml.namespace.QName)
org.apache.axis.encoding.Deserializer
getInvoiceAmount()
java.lang.Double
getPaymentReferenceNumber()
java.lang.String
getSerializer(java.lang.String, java.lang.Class, javax.xml.namespace.QName)
org.apache.axis.encoding.Serializer
getTypeDesc()
org.apache.axis.description.TypeDesc
getUserName()
java.lang.String
getVendorName()
java.lang.String
hashCode()
int
setAlertDate(java.lang.String)
void
setDescription(java.lang.String)
void
setInvoiceAmount(java.lang.Double)
void
setPaymentReferenceNumber(java.lang.String)
void
setUserName(java.lang.String)
void
setVendorName(java.lang.String)
void
So some of this is the fields I want, but I want the value: description, alert date, invoice amt, etc. Can anyone help me. What do I need to do next to get the values?
Here is my CF statement and the WSDL file.
thanks for the help,
BJ
Invoke statement
<cfinvoke
webservice="http://127.0.0.1:8500/APApproval/GetAPApprovalList.wsdl"
method="GetAPApprovalList" refreshwsdl="true"
returnvariable="response">
<cfinvokeargument name="UserName" value="DAVBRY"/>
</cfinvoke>
<cfoutput>#response#</cfoutput>
WSDL FILE
<?xml version="1.0"?>
<!--Automatically generated 10/07/2011 by Hyperservice Business Platform, NextAxiom Technology, Inc.-->
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
name="BSAPrototype.APApproval.GetAPApprovalList"
targetNamespace="http://www.nextaxiom.com/soapservice/BSAPrototype.APApproval.GetAPApprovalList/wsdl"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.nextaxiom.com/soapservice/BSAPrototype.APApproval.GetAPApprovalList/wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd1="http://www.nextaxiom.com/soapservice/xsd1">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" targetNamespace="http://www.nextaxiom.com/soapservice/xsd1">
<element name="GetAPApprovalList">
<complexType>
<sequence>
<element name="UserName" type="string"/>
</sequence>
</complexType>
</element>
<element name="GetAPApprovalListResult">
<complexType>
<sequence>
<element maxOccurs="unbounded"
name="APApprovalList" type="xsd1:APApprovalList"/>
</sequence>
</complexType>
</element>
<complexType name="APApprovalList">
<sequence>
<element minOccurs="0" name="UserName" type="string"/>
<element minOccurs="0" name="AlertDate" type="string"/>
<element minOccurs="0" name="Description" type="string"/>
<element minOccurs="0" name="PaymentReferenceNumber" type="string"/>
<element minOccurs="0" name="InvoiceAmount" type="double"/>
<element minOccurs="0" name="VendorName" type="string"/>
</sequence>
</complexType>
</schema>
</types>
<message name="GetAPApprovalListRequest">
<part element="xsd1:GetAPApprovalList" name="GetAPApprovalList"/>
</message>
<message name="GetAPApprovalListResponse">
<part element="xsd1:GetAPApprovalListResult" name="GetAPApprovalListResult"/>
</message>
<portType name="BSAPrototype.APApproval.GetAPApprovalListSoapPort">
<operation name="GetAPApprovalList">
<input message="tns:GetAPApprovalListRequest"/>
<output message="tns:GetAPApprovalListResponse"/>
</operation>
</portType>
<binding name="BSAPrototype.APApproval.GetAPApprovalListSoapBinding" type="tns:BSAPrototype.APApproval.GetAPApprovalListSoapPort">
<soap:binding xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetAPApprovalList">
<soap:operation
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="urn:doc?in=GetAPApprovalList?out=GetAPApprovalListResult?path=BSAPrototype.AP Approval.GetAPApprovalList"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="BSAPrototype.APApproval.GetAPApprovalList">
<port
binding="tns:BSAPrototype.APApproval.GetAPApprovalListSoapBinding" name="BSAPrototype.APApproval.GetAPApprovalListPort">
<soap:address
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" location="http://nextaxb:7777/NXAServer/NextAxiomServer"/>
</port>
</service>
</definitions>Getting complex objects back from web service calls are always tricky - especially when they've been desearialized as an object. We've found its a lot easier to deal with the Raw SOAP messages so at least we're working with an XML document, rather than a series of Getter functions, any of which that may return a NULL value (which does really unpleasant things to a CF variable).
When you absolutely have to deal with a complex non-CF originating object in CF, we've found that you can actually use the underlying Java classes to identify and automatically execute the getter functions to effective dump out the variables. We've rolled it up into a custom tag. The base code for the logic is below:
<cfset objVar = VARIABLE_CONTAINING_OBJECT_FROM_WEB_SERVICE>
<cfset arrMethods = objVar.getClass().getMethods()>
<cfoutput>
<cfif isDefined("arrMethods") AND isArray(arrMethods) AND ArrayLen(arrMethods) gt 0>
<table border="1" cellspacing="0" cellpadding="5" style="border-collapse:collapse;border:1px solid black;">
<tr>
<td colspan="3" style="background-color:##CCCCCC;">RESULT</td>
</tr>
<tr>
<td>Method</td>
<td>Class</td>
<td>Return Value</td>
</tr>
<cfset sComplexMethods = "">
<cfloop from="1" to="#ArrayLen(arrMethods)#" index="iMethod">
<cfset sReturnType = arrMethods[iMethod].getReturnType().toString()>
<cfif ListFindNoCase("int,java.lang.String,class java.lang.String,double,float,char", sReturnType)>
<tr>
<td>#arrMethods[iMethod].getName()#</td>
<td>#sReturnType#</td>
<cfset sReturnValue = EVALUATE("objVar." & arrMethods[iMethod].getName() & "()")>
<td><cfif isDefined("sReturnValue") AND sReturnValue neq "">#sReturnValue#<cfelse> </cfif></td>
</tr>
</cfif>
#sComplexMethods#
</cfloop>
</table>
</cfif>
</cfoutput> -
Web service returns old values
Hallo,
by using web service my project is remotely controled. The mapping data will be transferred using the shared variables.
The shared variables work perfectly, but the responce on the xml page (outputs: web_master_resp, web_scene_resp, web_action_resp and error code) always returns the old values which happened at the last url activity.
For instance, after sending "http://localhost:8080/webcontrol/scene/action" and following "http://localhost:8080/webcontrol/scene_1/action_1" the xml returns "scene" on "web_scene_resp" and "action" on "web_action_resp"
what should i do to get the lastest values read?hi,
just a guess: I'd try to use I instead of NUMC for the document numbers.
NUMC is no number but a character string with numeric characters only. only some display routines in SAP know that this string of numerals represents a number and omit leading zeroes.
my 2 cents,
anton -
Web Service to xml to bls to xacute query formatting
Hi.
I have a BLS calling a web service which returns a data set in the xMII XML format. I take that output and put it in a xml transaction output property and try to read it with an xacute query. (obviously I will be doing more manipulations to the data in the bls once i get this issue resolved). The query returns a blank page when tested.
OK, so I take the same xml output, and in the same bls use the Write_File action to create an xml file, then use the XMLLoader action to read in that file back into the bls, assign the results of the xmlLoader to the xml transaction output property and try to read that output with an xacute query. I get the data when I test the query.
Now, I don't touch the format between the web service and the file or after I load the file. How come the xacute query can read one transaction output and not the other?
I have taken both transaction propertie values from a trace log and compared the strings and find no difference between the return from the web service and the result of the xmlLoader. I don't want to take the output of the web service and write it to a file just to get in into an xml format that works properly.I am sure that is the root cause, but how do I do an explicit type conversion without going through the output to file and load xml step? What else is needed?
The return of the Web Service is an XML that contains an XML string in the xMII format. I can look at that string and it looks correct (Though xacute doesn't recognize the string as an xml structure). I can take that string and put it in an XML transaction property and it looks correct (the reference in the BLS is: SqlXml2.SQLXML2Response{/ns1:SQLXML2Response/ns1:SQLXML2Return}). I can take that XML variable and output to a file and then load that file and it actually is correct (though the content of the file and the return string from the web service are identical). So, I can see that the type conversion takes place when I load the xml file but I haven't found the action that will do the type conversion otherwise even though the "conversion" doesn't seem to require changing the content at all. Have I missed something? -
Web service returning Document
Hi,
I need your help on this:
I have a web service that returns a Document object (its an xml-SVG file).
By direct call to the method "public static Document Chart(Object[] val) {"
it returns a well formed file. When I try it returning a String it is also OK. When I return a Document it sent me errors (Sorry for the long list)
The normal svg file is after the error message.
Can you give me an example how to make a java client to request that xml Document and print it on the screen.
// error
org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
at org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1008)
at org.apache.xerces.framework.XMLDocumentScanner.reportFatalXMLError(XMLDocumentScanner.java:625)
at org.apache.xerces.framework.XMLDocumentScanner.abortMarkup(XMLDocumentScanner.java:679)
at org.apache.xerces.framework.XMLDocumentScanner$TrailingMiscDispatcher.dispatch(XMLDocumentScanner.java:1496)
at org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:380)
at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:900)
at org.apache.soap.util.xml.XercesParserLiaison.read(XercesParserLiaison.java:85)
at org.apache.soap.rpc.Call.invoke(Call.java:157)
at cc432ass3.Client.main(Client.java:90)
Caught SOAPException (SOAP-ENV:Protocol): <h1>Error: 500</h1>
<h2>Location: /soap/servlet/rpcrouter</h2><b>Internal Servlet Error:</b><br><pre>javax.servlet.ServletException: Error building response en
at org.apache.soap.server.http.RPCRouterServlet.doPost(RPCRouterServlet.java:345)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405)
at org.apache.tomcat.core.Handler.service(Handler.java:287)
at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213)
at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501)
at java.lang.Thread.run(Thread.java:536)
</pre>
<b>Root cause:</b>
<pre>java.lang.IllegalArgumentException: No Serializer found to serialize a 'org.jdom.Document' using encoding style 'http://schemas.xmlsoa
at org.apache.soap.util.xml.XMLJavaMappingRegistry.querySerializer(XMLJavaMappingRegistry.java:125)
at org.apache.soap.encoding.SOAPMappingRegistry.querySerializer(SOAPMappingRegistry.java:297)
at org.apache.soap.encoding.soapenc.ParameterSerializer.marshall(ParameterSerializer.java:98)
at org.apache.soap.rpc.RPCMessage.marshall(RPCMessage.java:260)
at org.apache.soap.Body.marshall(Body.java:141)
at org.apache.soap.Envelope.marshall(Envelope.java:180)
at org.apache.soap.server.http.RPCRouterServlet.doPost(RPCRouterServlet.java:343)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405)
at org.apache.tomcat.core.Handler.service(Handler.java:287)
at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213)
at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501)
at java.lang.Thread.run(Thread.java:536)
</pre>
// ==== here is the svg that I take by direct call
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
<svg width="800" height="500">
<text x="150" y="60" style="font-family: verdana, arial, sans-serif;font-size: 24;
font-weight: bold;fill: #0099ff; stroke: black;
stroke-width: 1">This is a PieChart For CC432 Assignment 3</text>
<circle cx="310" cy="310" r="180" style="fill: black; fill-opacity:0.6;
stroke:none; filter:url(#dropshadow)"/>
<desc>This is a PieChart Solution For CC432 Assignment 3</desc>
<path d="M300,300 L480,300 A180,180 0 0,0 405,155 Z" style="fill: #0000ff;stroke: black; stroke-width: 2"/>
<rect x="550" y="150" width="30" height="20" style="stroke-linejoin: mitre; stroke - width: 2;
stroke: black; fill:#0000ff"/>
<text x="590" y="165" style="font-family:verdana, arial, sans-serif;
font - size: 14; fill: black; stroke: none">The value of 1 Data Set is 12.0</text>
<path d="M300,300 L405,155 A180,180 0 0,0 134,232 Z" style="fill: #ffd700;stroke: black; stroke-width: 2"/>
<rect x="550" y="180" width="30" height="20" style="stroke-linejoin: mitre; stroke - width: 2;
stroke: black; fill:#ffd700"/>
<text x="590" y="195" style="font-family:verdana, arial, sans-serif;
font - size: 14; fill: black; stroke: none">The value of 2 Data Set is 23.0</text>
<path d="M300,300 L134,232 A180,180 0 1,0 480,300 Z" style="fill: #ff6347;stroke: black; stroke-width: 2"/>
<rect x="550" y="210" width="30" height="20" style="stroke-linejoin: mitre; stroke - width: 2;
stroke: black; fill:#ff6347"/>
<text x="590" y="225" style="font-family:verdana, arial, sans-serif;
font - size: 14; fill: black; stroke: none">The value of 3 Data Set is 45.0</text>
<text x="550" y="480" style="font-family: verdana, arial, sans-serif;font-size: 14;
font-weight: bold;fill: #FF0000; stroke: black;
stroke-width: 1">my name</text>
</svg>While returning the document u would have to encode the content using base64 or url encoder, then decode it after the xml is parsed.
Maybe you are looking for
-
Does the cost of query depends on the number of rows in the table? Also does the cost change from database version to version, like if i check the cost of query in oracle 8i and if i check same query in oracle 9i, will there be any difference in the
-
Hello all, My friend has typed his essay on iWork for iCloud on a PC, and then he upgraded his account to iCloud Drive, and he has no access to his essay anymore since it says that because you're account is upgraded you cannot access your files on iW
-
Hello I have a set of data in two colums Col 1 = date in M/D/Y format Col 2 = Data (numbers) I have the XY graph plotting the data according to the date but as I zoom in and out I notice weekend dates are showing up the data was only taken during the
-
[Bash] Variable exapansion and variables within variables
To make the following script more reusable, I wanted to refactor the "pattern" in a separate variable for the renameit2 function to use. However, it currently doesn't work; "tr" throws an error: tr: extra operand `\'-\''" Can anyone explain how I can
-
How do i enable CMSS in the soundcard option
How do i do this? I have sound blaster 24bit