SOAP request has multiref/soapenc:Array elements
Hi there - I am receiving a request that is structured using multiref elements. When I examine the SOAP request in the diagnostic log, I see all of the data, but when it gets to the mediator, only the elements in id0 are populated and the rest of the elements are empty. I have seen a few posts that OSB does not handle multirefs, but wanted to see if anyone has solved the problem in another way.
I am currently using jDev 11.1.1.2 but moving soon to 11.1.1.5. Here is the associated wsdl, an example of the raw SOAP request (which has all of the data) and then the input to my mediator (with the empty elements):
The problem is occurring with the "Keys" type which is a soapenc:Array. In this case I get the id0 Keys element but the rest of the Keys elements (id1, id2, id3 and id4) are empty when it gets to my mediator.
WSDL_
<s:complexType name="Document">
<s:sequence>
<s:element name="Keys" type="tns:Keys" />
<s:element name="IdentifierDisplay" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="contextType" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="autodownload" type="s:boolean" minOccurs="0" maxOccurs="1" />
<s:element name="ObjectId" type="tns:ObjectId" />
<s:element name="Type" type="tns:Type" minOccurs="0" maxOccurs="1" />
<s:element name="EditURL" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="Description" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="Date" type="s:date" minOccurs="0" maxOccurs="1" />
<s:element name="Time" type="s:time" minOccurs="0" maxOccurs="1" />
<s:element name="Status" type="tns:Status" minOccurs="0" maxOccurs="1" />
<s:element name="DocumentLocators" type="tns:DocumentLocators" minOccurs="0" maxOccurs="1" />
<s:element name="content" type="s:base64Binary" minOccurs="0" maxOccurs="1" />
</s:sequence>
</s:complexType>
<s:complexType name="Type">
<s:sequence>
<s:element name="Keys" type="tns:Keys" />
<s:element name="IdentifierDisplay" type="s:string" minOccurs="0" maxOccurs="1" />
</s:sequence>
</s:complexType>
<s:complexType name="Status">
<s:sequence>
<s:element name="Keys" type="tns:Keys" minOccurs="0" maxOccurs="1" />
<s:element name="Name" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="Value" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="Date" type="s:date" minOccurs="0" maxOccurs="1" />
<s:element name="Time" type="s:time" minOccurs="0" maxOccurs="1" />
</s:sequence>
</s:complexType>
<s:complexType name="ElectronicFileLocator">
<s:sequence>
<s:element name="Keys" type="tns:Keys" minOccurs="0" maxOccurs="1" />
<s:element name="IdentifierDisplay" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="contextType" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="filename" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="fileDateTime" type="s:string" minOccurs="1" maxOccurs="1" />
<s:element name="fileLocation" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="fileSize" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="serverAddress" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="serverDescription" type="s:string" minOccurs="1" maxOccurs="1" />
<s:element name="serverType" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="serverPlatform" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="serverVendor" type="s:string" minOccurs="0" maxOccurs="1" />
</s:sequence>
</s:complexType>
<s:complexType name="PhysicalDocumentLocator">
<s:sequence>
<s:element name="Keys" type="tns:Keys" minOccurs="0" maxOccurs="1" />
<s:element name="IdentifierDisplay" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="contextType" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="location" type="s:string" minOccurs="0" maxOccurs="1" />
<s:element name="Date" type="s:date" minOccurs="1" maxOccurs="1" />
</s:sequence>
</s:complexType>
<s:complexType name="DocumentLocators">
<s:sequence>
<s:element name="ElectronicFileLocator" type="tns:ElectronicFileLocator" minOccurs="0" maxOccurs="1" />
<s:element name="PhysicalDocumentLocator" type="tns:PhysicalDocumentLocator" minOccurs="0" maxOccurs="1" />
</s:sequence>
</s:complexType>
<s:complexType name="Keys">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s:string[]" ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
XML input from diagnostic.log Note: bold elements are missing once it gets to my mediator_
<?xml version = '1.0' encoding = 'UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:create xmlns:ns1="http://www.replaced.com/edms" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<Document href="#id0"/>
</ns1:create>
<multiRef xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://www.replaced.com/edms/types" id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:Document">
<Keys soapenc:arrayType="xsd:string[3]" xsi:type="soapenc:Array">
<Keys xsi:type="xsd:string">DENVER</Keys>
<Keys xsi:type="xsd:string">CAP</Keys>
<Keys xsi:type="xsd:string" xsi:nil="true"/>
</Keys>
<IdentifierDisplay xsi:type="xsd:string">2011-SITE-000011</IdentifierDisplay>
<contextType xsi:type="xsd:string">application/xml</contextType>
<autodownload xsi:type="xsd:boolean">false</autodownload>
<ObjectId href="#id1"/>
<Type href="#id2"/>
<Description xsi:type="xsd:string">skipper7</Description>
<EditURL xsi:type="xsd:string" xsi:nil="true"/>
<Date xsi:type="xsd:date">2011-11-03</Date>
<Time xsi:type="xsd:time" xsi:nil="true"/>
<Status xsi:type="ns2:Status" xsi:nil="true"/>
<DocumentLocators href="#id3"/>
</multiRef>
<multiRef xmlns:ns3="http://www.replaced.com/edms/types" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id3" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:DocumentLocators">
<ElectronicFileLocator href="#id4"/>
<PhysicalDocumentLocator xsi:type="ns3:PhysicalDocumentLocator" xsi:nil="true"/>
</multiRef>
*<multiRef xmlns:ns4="http://www.replaced.com/edms/types" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id2" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns4:Type">*
*<Keys soapenc:arrayType="xsd:string[3]" xsi:type="soapenc:Array">*
*<Keys xsi:type="xsd:string">DENVER</Keys>*
*<Keys xsi:type="xsd:string">CAP</Keys>*
*<Keys xsi:type="xsd:string" xsi:nil="true"/>*
*</Keys>*
*<IdentifierDisplay xsi:type="xsd:string">Inspection Notice</IdentifierDisplay>*
*</multiRef>*
*<multiRef xmlns:ns5="http://www.replaced.com/edms/types" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns5:ObjectId">*
*<Keys soapenc:arrayType="xsd:string[3]" xsi:type="soapenc:Array">*
*<Keys xsi:type="xsd:string">DENVER</Keys>*
*<Keys xsi:type="xsd:string">CAP</Keys>*
*<Keys xsi:type="xsd:string" xsi:nil="true"/>*
*</Keys>*
*<IdentifierDisplay xsi:type="xsd:string">2011-SITE-000011</IdentifierDisplay>*
*<Value xsi:type="xsd:string"/>*
*<contextType xsi:type="xsd:string">application/xml</contextType>*
*</multiRef>*
*<multiRef xmlns:ns6="http://www.replaced.com/edms/types" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id4" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns6:ElectronicFileLocator">*
*<Keys soapenc:arrayType="xsd:string[3]" xsi:type="soapenc:Array">*
*<Keys xsi:type="xsd:string">DENVER</Keys>*
*<Keys xsi:type="xsd:string">CAP</Keys>*
*<Keys xsi:type="xsd:string" xsi:nil="true"/>*
*</Keys>*
*<IdentifierDisplay xsi:type="xsd:string" xsi:nil="true"/>*
*<contextType xsi:type="xsd:string">application/xml</contextType>*
*<filename xsi:type="xsd:string">ExternalAPOService.wsdl</filename>*
*<fileDateTime xsi:type="xsd:string">2011-11-03T16:20:46</fileDateTime>*
*<fileLocation xsi:type="xsd:string">ExternalAPOService.wsdl</fileLocation>*
*<fileSize xsi:type="xsd:string">24084</fileSize>*
*<serverAddress xsi:type="xsd:string" xsi:nil="true"/>*
*<serverDescription xsi:type="xsd:string">skipper7</serverDescription>*
*<serverType xsi:type="xsd:string" xsi:nil="true"/>*
*<serverPlatform xsi:type="xsd:string" xsi:nil="true"/>*
*<serverVendor xsi:type="xsd:string" xsi:nil="true"/>*
*</multiRef>* </soapenv:Body>
</soapenv:Envelope>
XML input when looking at the input to my mediator in em_
<Document>
<Keys soapenc:arrayType="xsd:string[3]" xsi:type="soapenc:Array" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<Keys xsi:type="xsd:string">DENVER</Keys>
<Keys xsi:type="xsd:string">CAP</Keys>
<Keys xsi:type="xsd:string" xsi:nil="true"/>
</Keys>
<IdentifierDisplay xsi:type="xsd:string" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2011-SITE-000011</IdentifierDisplay>
<contextType xsi:type="xsd:string" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">application/xml</contextType>
<autodownload xsi:type="xsd:boolean" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">false</autodownload>
<ObjectId href="#id1" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<Type href="#id2" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<Description xsi:type="xsd:string" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<EditURL xsi:type="xsd:string" xsi:nil="true" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<Date xsi:type="xsd:date" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2011-11-03</Date>
<Time xsi:type="xsd:time" xsi:nil="true" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<Status xsi:type="ns2:Status" xsi:nil="true" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<DocumentLocators href="#id3" xmlns:ns1="http://www.replaced.com/edms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</Document>
Edited by: mi**** on Nov 4, 2011 7:24 AM
Hi PeterFL,
Well Done!
Thank you very much for sharing the solution to us.
Best Regards,
Amy Peng
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey.
Similar Messages
-
WS Addressing elements in a SOAP request sent via SOAP sender adapter
Hi guys,
I have a requirement (Proxy->PI->SOAP) for sending a soap request using the WS addressing elements in the request header. As I went through a documentation to SOAP sender adpter there is no option for this. WS-A is supported in the WS adapter, but the target web service does not support WS-RM, so this is not an option.
Do you have any hint?
Thanks,
PeterYou can create your own SOAP header in mapping or use Axis framework for this.
Regards
Stefan -
Error passing byte array in soap request
Hi,
i am trying to pass byte arrays (and also java.lang.Byte array) as parameter in
a soap request.
to do so i have defined a simple web service under weblogic 7.0.
then i test it through the WebLogic Webservice standard testing home page.
the value field for testing my web service is already filled by weblogic with:
<bytes xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="xsd:base64Binary">aopd</bytes>
i only need to invoke my web service to test it.
then an exception is raised:
javax.xml.soap.SOAPException: failed to deserialize xml:weblogic.xml.schema.binding.DeserializationException:
error decoding base64binary - with nested exception: [java.io.IOException: Error
in encoded stream] javax.xml.soap.SOAPException: failed to deserialize xml:weblogic.xml.schema.binding.DeserializationException:
error decoding base64binary - with nested exception: [java.io.IOException: Error
in encoded stream] at weblogic.webservice.core.DefaultPart.toJava(DefaultPart.java:301)
at weblogic.webservice.tools.pagegen.SampleInstance.getJavaObject(SampleInstance.java:130)
at weblogic.webservice.server.servlet.ServletBase.getJavaParams(ServletBase.java:296)
at weblogic.webservice.server.servlet.ServletBase.invokeOperation(ServletBase.java:239)
at weblogic.webservice.server.servlet.WebServiceServlet.invokeOperation(WebServiceServlet.java:306)
at weblogic.webservice.server.servlet.ServletBase.handleGet(ServletBase.java:198)
at weblogic.webservice.server.servlet.ServletBase.doGet(ServletBase.java:124)
at weblogic.webservice.server.servlet.WebServiceServlet.doGet(WebServiceServlet.java:224)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1058)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:401)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:306)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:5412)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:744)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3086)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2544)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:153) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:134)
any idea?Hi,
Looks like a known bug (CR087883).
Thanks,
Bruce
cyrille puget wrote:
Hi,
i am trying to pass byte arrays (and also java.lang.Byte array) as parameter in
a soap request.
to do so i have defined a simple web service under weblogic 7.0.
then i test it through the WebLogic Webservice standard testing home page.
the value field for testing my web service is already filled by weblogic with:
<bytes xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="xsd:base64Binary">aopd</bytes>
i only need to invoke my web service to test it.
then an exception is raised:
javax.xml.soap.SOAPException: failed to deserialize xml:weblogic.xml.schema.binding.DeserializationException:
error decoding base64binary - with nested exception: [java.io.IOException: Error
in encoded stream] javax.xml.soap.SOAPException: failed to deserialize xml:weblogic.xml.schema.binding.DeserializationException:
error decoding base64binary - with nested exception: [java.io.IOException: Error
in encoded stream] at weblogic.webservice.core.DefaultPart.toJava(DefaultPart.java:301)
at weblogic.webservice.tools.pagegen.SampleInstance.getJavaObject(SampleInstance.java:130)
at weblogic.webservice.server.servlet.ServletBase.getJavaParams(ServletBase.java:296)
at weblogic.webservice.server.servlet.ServletBase.invokeOperation(ServletBase.java:239)
at weblogic.webservice.server.servlet.WebServiceServlet.invokeOperation(WebServiceServlet.java:306)
at weblogic.webservice.server.servlet.ServletBase.handleGet(ServletBase.java:198)
at weblogic.webservice.server.servlet.ServletBase.doGet(ServletBase.java:124)
at weblogic.webservice.server.servlet.WebServiceServlet.doGet(WebServiceServlet.java:224)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1058)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:401)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:306)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:5412)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:744)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3086)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2544)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:153) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:134)
any idea? -
How to pack attribute values in a soap request?
Hello,
We are trying to make an external webservice call through GWWS.
The (soap) request contains an element which looks like:
+<Request Version="1.0" RequestID="11111111" TypeOfRequest="type1" Echo="false">+
+<Info>+
+<Account xmlns="http://something.com/Domain1/">ABCD1234</Account>+
+</Info>+
+</Request>+
We had created this soap request based on the WSDL provided to us by the webservice host.
We used a tool (like soapui) to generate the the above request.
To be able to make a service call to this webserive, we used the wsdlcvt to generate the fml32 field headers as:
wsdlcvt -i <provided wsdl> -o <baseoutput name>
However we could not find a way to pack in the the information related to the attributes.
In vain, we tried to use the option [-m] with wsdlcvt.
Since there are no field headers generated by the wsdlcvt for the attributes, we do not know how do we put values of "Version", "RequestID", "TypeofRequest", "Echo" attributes of the "Request" element in the webservice request.
Are we missing something here?
How can we populate/put information in the attributes of an element in a request?
Thank you.
Sincere Regards,
MrugendraHello Xu,
We have a simple test wsdl as follows
+<?xml version="1.0" encoding="UTF-8"?>+
+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://new.webservice.namespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://new.webservice.namespace">+
+<wsdl:types>+
+<xsd:schema targetNamespace="http://new.webservice.namespace" xmlns="http://new.webservice.namespace" elementFormDefault="unqualified" attributeFormDefault="unqualified">+
+<xsd:complexType name="Service_Type">+
+<xsd:sequence>+
+<xsd:element name="DateTime" type="xs:dateTime" nillable="true">+
+</xsd:element>+
+<xsd:element name="UUID" type="xs:string" nillable="true">+
+</xsd:element>+
+<xsd:element name="Status" nillable="true" minOccurs="0" maxOccurs="unbounded">+
+<xsd:complexType>+
+<xs:sequence>+
+<xs:element name="StatusDesc" type="xs:string">+
+</xs:element>+
+</xs:sequence>+
+<xsd:attribute name="StatusTyp" type="xs:string" use="required">+
+</xsd:attribute>+
+</xsd:complexType>+
+</xsd:element>+
+</xsd:sequence>+
+<xsd:attribute name="Version" type="xs:string" use="required">+
+</xsd:attribute>+
+<xsd:attribute name="Name" type="xs:string" use="required">+
+</xsd:attribute>+
+</xsd:complexType>+
+</xsd:schema>+
+</wsdl:types>+
+<wsdl:message name="GetServiceReq">+
+<wsdl:part name="ServiceReq" type="tns:Service_Type"/>+
+</wsdl:message>+
+<wsdl:message name="GetServiceRes">+
+<wsdl:part name="ServiceRes" type="tns:Service_Type"/>+
+</wsdl:message>+
+<wsdl:portType name="ServicePortType">+
+<wsdl:operation name="getService">+
+<wsdl:input message="tns:GetServiceReq"/>+
+<wsdl:output message="tns:GetServiceRes"/>+
+</wsdl:operation>+
+</wsdl:portType>+
+<wsdl:binding name="ServiceBinding" type="tns:ServicePortType">+
+<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>+
+<wsdl:operation name="getService">+
+<soap:operation soapAction="getService"/>+
+<wsdl:input>+
+<soap:body use="literal"/>+
+</wsdl:input>+
+<wsdl:output>+
+<soap:body use="literal"/>+
+</wsdl:output>+
+</wsdl:operation>+
+</wsdl:binding>+
+<wsdl:service name="Service">+
+<wsdl:port name="getService" binding="tns:ServiceBinding">+
+<soap:address location="No Target Adress"/>+
+</wsdl:port>+
+</wsdl:service>+
+</wsdl:definitions>+
When we create a soap request (Using soapiu) from the above wsdl we get:
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">+
+<soapenv:Header/>+
+<soapenv:Body>+
+<ServiceReq Version="?" Name="?">+
+<DateTime>?</DateTime>+
+<UUID>?</UUID>+
+<!--Zero or more repetitions:-->+
+<Status StatusTyp="?">+
+<StatusDesc>?</StatusDesc>+
+</Status>+
+</ServiceReq>+
+</soapenv:Body>+
+</soapenv:Envelope>+
As you can see that ServiceReq has attributes Version and Name
However, wsdlcvt (with -m) creates the following fml32 headers
DateTime 1 string - fullname=DateTime, schema=xs:dateTime
ServiceReq 2 fml32 - fullname=ServiceReq, schema=tns:Service_Type
ServiceRes 3 fml32 - fullname=ServiceRes, schema=tns:Service_Type
Status 4 fml32 - fullname=Status, schema=tns:Status
StatusDesc 5 mbstring - fullname=StatusDesc, schema=xs:string
UUID 6 mbstring - fullname=UUID, schema=xs:string
The points that we did not understand:
1. You mentioned: "SALT will map the *whole* request to FLD_MBSTRING
It is not so in this case.
Did we miss something?
2. Going by your suggestion in your last reply how do we create the FML32 buffer (specifically for the "ServiceReq" element, with attributes) for the sample we have?
Thank you.
Sincere Regards,
Mrugendra -
Best practice to process inbound soapenc:Array
Hi, I'm working my way through a real world example where I've sent a keyword search query to Amazon and it return 10 results. This works great. Now I want to loop thru the Array and put the returned values into a table in the database. I can't seen to get down to the element level via XQuery to assign the returned values to my local variables. The XML returned is defined in the wdsl as:
<xsd:complexType name="DetailsArray">
<xsd:complexContent>
<xsd:restriction base="soapenc:Array">
<xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="typens:Details[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Details">
What's the best practice for walking thru this incoming XML Array?
Thanks...MattHello again!
Thanks for quick reply!
The instance state says : closed.completed.
Perhaps the problem is not the insert into db, but the transformation activity?
This is what the audit trail (raw xml) looks like:
<?xml version="1.0" encoding="UTF-8" ?>
- <audit-trail>
- <event sid="0" cat="2" type="2" n="0" date="2008-06-24T10:16:21.875+02:00">
- <message>
- <![CDATA[ New instance of BPEL process "BPELProcess3" initiated (# "150001").
]]>
</message>
</event>
- <event sid="BpPrc0.1" cat="1" type="2" label="process" n="1" date="2008-06-24T10:16:21.875+02:00" psid="0">
- <message>
- <![CDATA[ _cr_
]]>
</message>
</event>
- <event sid="BpTry0.2" cat="1" type="2" n="2" date="2008-06-24T10:16:21.890+02:00" psid="BpPrc0.1">
- <message>
- <![CDATA[ _cr_
]]>
</message>
</event>
- <event sid="BpSeq0.3" cat="1" type="2" label="sequence" n="3" date="2008-06-24T10:16:21.890+02:00" psid="BpTry0.2">
- <message>
- <![CDATA[ _cr_
]]>
</message>
</event>
- <event sid="BpSeq0.3" cat="2" type="2" wikey="150001-BpRcv0-BpSeq0.3-1" n="4" date="2008-06-24T10:16:21.921+02:00">
- <message>
- <![CDATA[ Received "inputVariable" call from partner "client"
]]>
</message>
- <details>
- <![CDATA[
<inputVariable><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="payload"><ns1:BPELProcess3ProcessRequest xmlns:ns1="http://xmlns.oracle.com/BPELProcess3">
<ns1:stations>18700</ns1:stations>
<ns1:username/>
</ns1:BPELProcess3ProcessRequest>
</part></inputVariable>
]]>
</details>
</event>
- <event to="GetStationProperties_getStationsProperties_InputVariable" sid="BpSeq0.3" cat="2" type="1" wikey="150001-BpAss0-BpSeq0.3-2" n="5" date="2008-06-24T10:16:21.953+02:00">
- <message>
- <![CDATA[ Updated variable "GetStationProperties_getStationsProperties_InputVariable"
]]>
</message>
- <details>
- <![CDATA[
<GetStationProperties_getStationsProperties_InputVariable><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="stations"><stations>18700</stations>
</part><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="username"><username xmlns="" xmlns:def="http://www.w3.org/2001/XMLSchema" xsi:type="def:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</part></GetStationProperties_getStationsProperties_InputVariable>
]]>
</details>
</event>
- <event to="GetStationProperties_getStationsProperties_InputVariable" sid="BpSeq0.3" cat="2" type="1" wikey="150001-BpAss0-BpSeq0.3-2" n="6" date="2008-06-24T10:16:21.953+02:00">
- <message>
- <![CDATA[ Updated variable "GetStationProperties_getStationsProperties_InputVariable"
]]>
</message>
- <details>
- <![CDATA[
<GetStationProperties_getStationsProperties_InputVariable><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="stations"><stations>18700</stations>
</part><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="username"><username/>
</part></GetStationProperties_getStationsProperties_InputVariable>
]]>
</details>
</event>
- <event sid="BpSeq0.3" cat="2" type="2" wikey="150001-BpInv0-BpSeq0.3-3" partnerWSDL="MetDataService2Ref.wsdl" n="7" date="2008-06-24T10:16:22.968+02:00">
- <message>
- <![CDATA[ Invoked 2-way operation "getStationsProperties" on partner "MetDataService".
]]>
</message>
- <details>
- <![CDATA[
<messages><GetStationProperties_getStationsProperties_InputVariable><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="stations"><stations>18700</stations>
</part><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="username"><username/>
</part></GetStationProperties_getStationsProperties_InputVariable><GetStationProperties_getStationsProperties_OutputVariable><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="return"><return xmlns:ns2="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:Array" xmlns:ns3="http://no.met.metdata/IMetDataService.xsd" ns2:arrayType="ns3:no_met_metdata_StationProperties[1]" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<item xsi:type="ns3:no_met_metdata_StationProperties">
<toDay xsi:type="xsd:int">0</toDay>
<toMonth xsi:type="xsd:int">0</toMonth>
<fromYear xsi:type="xsd:int">1937</fromYear>
<municipalityNo xsi:type="xsd:int">301</municipalityNo>
<amsl xsi:type="xsd:int">94</amsl>
<latDec xsi:type="xsd:double">59.9427</latDec>
<lonDec xsi:type="xsd:double">10.7207</lonDec>
<toYear xsi:type="xsd:int">0</toYear>
<department xsi:type="xsd:string">OSLO</department>
<fromMonth xsi:type="xsd:int">2</fromMonth>
<stnr xsi:type="xsd:int">18700</stnr>
<wmoNo xsi:type="xsd:int">492</wmoNo>
<latLonFmt xsi:type="xsd:string">decimal_degrees</latLonFmt>
<name xsi:type="xsd:string">OSLO - BLINDERN</name>
<fromDay xsi:type="xsd:int">25</fromDay>
</item>
</return>
</part></GetStationProperties_getStationsProperties_OutputVariable></messages>
]]>
</details>
</event>
- <event to="StoreStationProperties_insert_InputVariable" sid="BpSeq0.3" cat="2" type="1" wikey="150001-BpAss1-BpSeq0.3-4" n="8" date="2008-06-24T10:16:23.000+02:00">
- <message>
- <![CDATA[ Updated variable "StoreStationProperties_insert_InputVariable"
]]>
</message>
- <details>
- <![CDATA[
<StoreStationProperties_insert_InputVariable><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="EklimaStationsTblCollection"><EklimaStationsTblCollection xmlns:ns0="http://xmlns.oracle.com/pcbpel/adapter/db/top/db" xmlns="http://xmlns.oracle.com/pcbpel/adapter/db/top/db"/>
</part></StoreStationProperties_insert_InputVariable>
]]>
</details>
</event>
- <event sid="BpSeq0.3" cat="2" type="2" wikey="150001-BpInv1-BpSeq0.3-5" partnerWSDL="db.wsdl" n="9" date="2008-06-24T10:16:27.312+02:00">
- <message>
- <![CDATA[ Invoked 1-way operation "insert" on partner "db".
]]>
</message>
- <details>
- <![CDATA[
<StoreStationProperties_insert_InputVariable><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="EklimaStationsTblCollection"><EklimaStationsTblCollection xmlns:ns0="http://xmlns.oracle.com/pcbpel/adapter/db/top/db" xmlns="http://xmlns.oracle.com/pcbpel/adapter/db/top/db"/>
</part></StoreStationProperties_insert_InputVariable>
]]>
</details>
</event>
- <event sid="BpSeq0.3" cat="2" type="2" wikey="150001-BpRpl0-BpSeq0.3-6" n="10" date="2008-06-24T10:16:27.312+02:00">
- <message>
- <![CDATA[ Reply to partner "client".
]]>
</message>
- <details>
- <![CDATA[
<outputVariable><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="payload"><BPELProcess3ProcessResponse xmlns="http://xmlns.oracle.com/BPELProcess3"/>
</part></outputVariable>
]]>
</details>
</event>
- <event sid="BpSeq0.3" cat="1" type="2" n="11" date="2008-06-24T10:16:27.312+02:00">
- <message>
- <![CDATA[ _cl_
]]>
</message>
</event>
- <event sid="BpPrc0.1" cat="1" type="2" n="12" date="2008-06-24T10:16:27.312+02:00">
- <message>
- <![CDATA[ _cl_
]]>
</message>
</event>
- <event sid="BpPrc0.1" cat="2" type="2" n="13" date="2008-06-24T10:16:27.328+02:00">
- <message>
- <![CDATA[ BPEL process instance "150001" completed
]]>
</message>
</event>
</audit-trail>
The webservice-method I'm calling in this case is getStationsProperties.
Kind regards
Jørn Eirik -
Web Service operation not in SOAP request
Hi There,
I have a problem with the SOAP receiver adapter.
I have created an external definition and uploaded a wsdl file. Several messages have been created out of the file.
In my mapping I fill the message structure from the wsdl file. When I send the message to the Web Service I get an error back.
The reason for this error seam to be a missing tag under the SOAP:Body element. Because when I create a SOAP request with the XMLSPY, it looks like this:
<SOAP:Body>
<m:setVendor xmlns:m="http://..." ...>
<ns8:v xmlns:ns8="http://...">
But in the message from the XI adapter the <m:setVendor..> tag is missing:
<SOAP:Body>
<ns8:v xmlns:ns8="http://...">
This m: tag seems to be the operation of the web service.
Has anybody an Idea how to solve this?
Is the error in the SOAP adapter or in the message definition?
By the way, can I display the complete SOAP message that has been sent out from the adapter with any XI tool (including SOAP header)?
BR,
JürgenJurgen
I have exactly the same problem in a RFC -> RFC Adapter -> XI -> SOAP Adapter -> Web Service scenario.
What we see is that the external vendor wants the SOAP to be in "documet-literal wrapped" whereas XI is returning is as "document literal".
**I don't want to change the original wsdl file because it was provided by our business partner and a modification could cause problems when release update.
But I have build a workaround with an XSL stylesheet as a second mapping step in my Interface Mapping. The stylesheet adds the missing operation tag into the XML message.**
Even in our case we dont want to change wsdl, the operation & soap body are going as two parts we want the soap body in operation,i think this can be achieved by xsl stylesheet,Can u please brief us about xsl stylesheet as a second mapping step in interface maping.I dint work on xsl before......
Advance thanx for ur help
Sriram -
Intercepting SOAP Requests at HTTP Level
We have a WLS Web Service in which we want to compress the body of the HTTP
message containing the SOAP request (envelope). The compression will be done
using gzip and including a standard
Content-Encoding: gzip
HTTP request header.
This makes it necessary to intercept the HTTP/SOAP request on the server
side to decompress the body of the HTTP message before WLS SOAP processing
begins.
Doing this in the SOAP Handler Chain is too late; by this time, WLS will
have already attempted to parse the HTTP message and create (bind) the
appropriate Java SOAP object structure (SOAPMessage, SOAPPart, etc.).
Question: Is there a way to intercept the HTTP POST request containing the
SOAP message early enough (e.g., as it comes off the wire) so that the body
of the HTTP message can be decompressed before WLS parses it and creates
the SOAP objects to pass to the Handler Chain?
Thanks for any help and insight you can provide.
JohnI've been dealing with a similar problem and it actually doesn't appear that WLS has bound everything by the SOAP Handler level. I have been working on inserting encryption into the WLS's SOAP handlers. I was getting nasty error messages when I was trying to encrypt the contents of the message body. At first I thought this was due to WLS trying to bind passed variables. This was mostly because of the invalid schema representation of a variable type x combined with a java.lang.NumberFormatException. However, if I encrypt 1 level lower i.e. the contents of the operations WLS becomes happy so I don't know what to think anymore. If you have any insites into why it would give me the error message it is giving me I would like to know. I hope my post has furthered the understanding of your problem in some way.
more information on what I did is below:
complete client request
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<env:Header>
</env:Header>
<env:Body env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<m:getBalance xmlns:m="http://example.com" Id="encryptMyContents">
<intVal xsi:type="xsd:int">1</intVal>
<string xsi:type="xsd:string">blah blah blah</string>
</m:getBalance>
</env:Body>
</env:Envelope>
general form of encrypted client request
<env:Body env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<m:getBalance xmlns:m="http://example.com" Id="encryptMyContents">
<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#"
Id="encryptedDataID"
Type="http://www.w3.org/2001/04/xmlenc#Content">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<CipherData>
<CipherValue>long encrypted stuff</CipherValue>
</CipherData>
</EncryptedData>
</m:getBalance>
</env:Body>
The above encrypting the contents of the operation
works with WLS
The below encrypting the contents of the body
does NOT work with WLS
The target of the encrytion is moved
<env:Body Id="encryptMyContents" ...
general form of encrypted server response (I suppose I should have copied server response above but you can get the picture without it)
<env:Body env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<m:getBalance xmlns:m="http://example.com" Id="encryptMyContents">
<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#"
Id="encryptedDataID"
Type="http://www.w3.org/2001/04/xmlenc#Content">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<CipherData>
<CipherValue>long encrypted stuff</CipherValue>
</CipherData>
</EncryptedData>
</m:getBalance>
</env:Body>
I get my nasty error message...
Note this error message is if I simply use the invoke button that weblogic creates for me
In this case the what happens is
- the request handler recieves an unencrypted client request does nothing to the request
- the web service generates its response
- the response handler encrypts body contents of the response
- the handler finishes
- WLS throws the exception below
NOTE: after this point there is nothing but the error message.
Failed to invoke service:
weblogic.xml.schema.types.IllegalLexicalValueException: "9HhL2AdpL5d4B2KOWrTCtJ2Q6Ybu+6..." is not a valid lexical representation of {http://www.w3.org/2001/XMLSchema}double - java.lang.NumberFormatException: For input string: "9HhL2AdpL5d4B2KOWrTCtJ2Q6Ybu+6/AftWxi/Kv752g4P9r30FhOXGgrCimrkd6 v09FsLsPdQagJQiETnMSVwVw1Kfw34fITv/S36Et+4SQ1t5+TpZwypuVz8bkyBFy KdSzrAD9ONxYERR1y6fy3m1XPZD5IUECmAKI/QaymtZjAyzQkA3U33sB+V3n5ZqS QcYcCj/9JwheIlBPkKL/JIPn6yqg6VBMp15a8CHYY5W/+aRpSMaDeDFkXOgBIelX wQumJ47tKXbHrhHio+MmeoMrlf0A1oU71j8ZPOBkvvfg3ty56OV9HBULOr+FtpnP dIlgJA3CxyX6L3W6ElP82biZwJumqL6ABDKNvyTJn8kfCkYUPjIynv8iiOHPUPEE ssHqVy+PI1tqoXHL6llVcb2a9gL4WNPXEC8EQnIlOay1t+nVrCRAG8PbzqIFApzd" at weblogic.xml.schema.types.XSDDouble.naiveConvertXml(XSDDouble.java:182) at weblogic.xml.schema.types.XSDDouble.convertXml(XSDDouble.java:153) at weblogic.xml.schema.binding.internal.builtin.XSDDoubleDeserializer.getObjectFromContent(XSDDoubleDeserializer.java:15) at weblogic.xml.schema.binding.internal.builtin.XSDSimpleTypeDeserializer.processContent(XSDSimpleTypeDeserializer.java:173) at weblogic.xml.schema.binding.internal.builtin.XSDSimpleTypeDeserializer.processContent(XSDSimpleTypeDeserializer.java:161) at weblogic.xml.schema.binding.internal.builtin.XSDSimpleTypeDeserializer.deserialize(XSDSimpleTypeDeserializer.java:101) at weblogic.xml.schema.binding.RuntimeUtils.invoke_deserializer(RuntimeUtils.java:428) at weblogic.xml.schema.binding.RuntimeUtils.invoke_deserializer(RuntimeUtils.java:328) at weblogic.webservice.core.DefaultPart.toJava(DefaultPart.java:387) at weblogic.webservice.core.DefaultMessage.toJava(DefaultMessage.java:487) at weblogic.webservice.core.ClientDispatcher.receive(ClientDispatcher.java:329) at weblogic.webservice.core.ClientDispatcher.dispatch(ClientDispatcher.java:147) at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:473) at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:439) at weblogic.webservice.server.servlet.ServletBase.invokeMultiOutput(ServletBase.java:359) at weblogic.webservice.server.servlet.ServletBase.invokeOperation(ServletBase.java:314) at weblogic.webservice.server.servlet.WebServiceServlet.invokeOperation(WebServiceServlet.java:361) at weblogic.webservice.server.servlet.ServletBase.handleGet(ServletBase.java:280) at weblogic.webservice.server.servlet.ServletBase.doGet(ServletBase.java:157) at weblogic.webservice.server.servlet.WebServiceServlet.doGet(WebServiceServlet.java:280) at javax.servlet.http.HttpServlet.service(HttpServlet.java:743) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:214) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:120) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:272) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:165) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3022) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1925) at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1848) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1288) Caused by: java.lang.NumberFormatException: For input string: "9HhL2AdpL5d4B2KOWrTCtJ2Q6Ybu+6/AftWxi/Kv752g4P9r30FhOXGgrCimrkd6 v09FsLsPdQagJQiETnMSVwVw1Kfw34fITv/S36Et+4SQ1t5+TpZwypuVz8bkyBFy KdSzrAD9ONxYERR1y6fy3m1XPZD5IUECmAKI/QaymtZjAyzQkA3U33sB+V3n5ZqS QcYcCj/9JwheIlBPkKL/JIPn6yqg6VBMp15a8CHYY5W/+aRpSMaDeDFkXOgBIelX wQumJ47tKXbHrhHio+MmeoMrlf0A1oU71j8ZPOBkvvfg3ty56OV9HBULOr+FtpnP dIlgJA3CxyX6L3W6ElP82biZwJumqL6ABDKNvyTJn8kfCkYUPjIynv8iiOHPUPEE ssHqVy+PI1tqoXHL6llVcb2a9gL4WNPXEC8EQnIlOay1t+nVrCRAG8PbzqIFApzd" at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224) at java.lang.Double.parseDouble(Double.java:482) at weblogic.xml.schema.types.XSDDouble.naiveConvertXml(XSDDouble.java:173) at weblogic.xml.schema.types.XSDDouble.convertXml(XSDDouble.java:153) at weblogic.xml.schema.binding.internal.builtin.XSDDoubleDeserializer.getObjectFromContent(XSDDoubleDeserializer.java:15) at weblogic.xml.schema.binding.internal.builtin.XSDSimpleTypeDeserializer.processContent(XSDSimpleTypeDeserializer.java:173) at weblogic.xml.schema.binding.internal.builtin.XSDSimpleTypeDeserializer.processContent(XSDSimpleTypeDeserializer.java:161) at weblogic.xml.schema.binding.internal.builtin.XSDSimpleTypeDeserializer.deserialize(XSDSimpleTypeDeserializer.java:101) at weblogic.xml.schema.binding.RuntimeUtils.invoke_deserializer(RuntimeUtils.java:428) at weblogic.xml.schema.binding.RuntimeUtils.invoke_deserializer(RuntimeUtils.java:328) at weblogic.webservice.core.DefaultPart.toJava(DefaultPart.java:387) at weblogic.webservice.core.DefaultMessage.toJava(DefaultMessage.java:487) at weblogic.webservice.core.ClientDispatcher.receive(ClientDispatcher.java:329) at weblogic.webservice.core.ClientDispatcher.dispatch(ClientDispatcher.java:147) at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:473) at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:439) at weblogic.webservice.server.servlet.ServletBase.invokeMultiOutput(ServletBase.java:359) at weblogic.webservice.server.servlet.ServletBase.invokeOperation(ServletBase.java:314) at weblogic.webservice.server.servlet.WebServiceServlet.invokeOperation(WebServiceServlet.java:361) at weblogic.webservice.server.servlet.ServletBase.handleGet(ServletBase.java:280) at weblogic.webservice.server.servlet.ServletBase.doGet(ServletBase.java:157) at weblogic.webservice.server.servlet.WebServiceServlet.doGet(WebServiceServlet.java:280) at javax.servlet.http.HttpServlet.service(HttpServlet.java:743) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:214) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:120) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:272) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:165) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3022) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1925) -
Flex sending corrupt SOAP request
I've created a PHP5 SOAP webservice and am trying to call a
method from flex. I get a fault from the Flex app that says
faultString="HTTP request error"
faultCode="Server.Error.Request"
The SOAP request received by the server is as follows (which
I think explains why the server responded with an error):
<SOAP-ENV:Envelope xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="
http://www.w3.org/2001/XMLSchema"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body/>
</SOAP-ENV:Envelope>
It is missing all the body parameters. What could cause an
empty request like this?
The relevant AS:
public var _webServiceLoaded:Boolean = false; // flag noting
when wsdl has been loaded
public var _myService:WebService = new WebService();
public function initWS():void {
_myService.wsdl = "
http://foreignserver.com/seminar_service.wsdl";
_myService.loadWSDL();
_myService.echoArgs.addEventListener("result",
echoResultHandler);
_myService.addEventListener("fault", faultHandler);
_myService.addEventListener('load',WSLoad);
public function send_attendee_email():void {
_myService.echoo("qwerty"); // should just return the same
string we send; echoo spelled with extra o
And my wsdl:
<?xml version="1.0"?>
<definitions
xmlns="
http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="
http://www.w3.org/2001/XMLSchema"
xmlns:tns="
http://foreignserver.com/seminar_service.php"
xmlns:soap="
http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="
http://schemas.xmlsoap.org/wsdl/"
xmlns:soapenc="
http://schemas.xmlsoap.org/soap/encoding/"
targetNamespace="
http://foreignserver.com/seminar_service.php">
<message name="echooInput">
<part name="echo" type="xsd:string"/>
</message>
<message name="send_attendee_emailInput">
<part name="sem_date" type="xsd:string"/>
<part name="sem_first" type="xsd:string"/>
<part name="sem_last" type="xsd:string"/>
<part name="sem_title" type="xsd:string"/>
<part name="sem_company" type="xsd:string"/>
<part name="sem_phone" type="xsd:string"/>
<part name="sem_email" type="xsd:string"/>
<part name="pdf_filename" type="xsd:string"/>
</message>
<message name="echooOutput">
<part name="return" type="xsd:string"/>
</message>
<message name="send_attendee_emailOutput">
<part name="return" type="xsd:string"/>
</message>
<portType name="seminarPortType">
<operation name="echoo">
<input message="tns:echooInput"/>
<output message="tns:echooOutput"/>
</operation>
<operation name="send_attendee_email">
<input message="tns:send_attendee_emailInput"/>
<output message="tns:send_attendee_emailOutput"/>
</operation>
</portType>
<binding name="seminarBinding"
type="tns:seminarPortType">
<soap:binding xmlns="
http://schemas.xmlsoap.org/wsdl/soap/"
style="rpc" transport="
http://schemas.xmlsoap.org/soap/http"/>
<operation xmlns:default="
http://schemas.xmlsoap.org/wsdl/soap/"
name="echoo">
<input xmlns:default="
http://schemas.xmlsoap.org/wsdl/soap/">
<soap:body xmlns="
http://schemas.xmlsoap.org/wsdl/soap/"
use="encoded" encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output xmlns:default="
http://schemas.xmlsoap.org/wsdl/soap/">
<soap:body xmlns="
http://schemas.xmlsoap.org/wsdl/soap/"
use="encoded" encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
<operation xmlns:default="
http://schemas.xmlsoap.org/wsdl/soap/"
name="send_attendee_email">
<input xmlns:default="
http://schemas.xmlsoap.org/wsdl/soap/">
<soap:body xmlns="
http://schemas.xmlsoap.org/wsdl/soap/"
use="encoded" encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output xmlns:default="
http://schemas.xmlsoap.org/wsdl/soap/">
<soap:body xmlns="
http://schemas.xmlsoap.org/wsdl/soap/"
use="encoded" encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="seminarService">
<port xmlns:default="
http://schemas.xmlsoap.org/wsdl/soap/"
name="seminarPort" binding="tns:seminarBinding">
<soap:address xmlns="
http://schemas.xmlsoap.org/wsdl/soap/"
location="
http://foreignserver.com/seminar_service.php"/>
</port>
</service>
</definitions>This behavior (empty SOAP request sent to server) stemmed
somehow from my wsdl file. I'm uncertain what the specific problem
was, but when I rebuilt the wsdl from scratch using a different
model, the SOAP request from Flex was properly formed. -
Found character data inside an array element while deserializing
Hi Experts,
When I am trying to execute the webservice I am getting the following error
Found character data inside an array element while deserializing
Actual structure is as follows
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://10.1.2.21:8090/axis/services/InventoryManager" targetNamespace="http://10.1.2.21:8090/axis/services/InventoryManager">
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<xsd:element xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns="" name="retrieveInventoryRequest" type="retrieveInventoryRequest" />
<xsd:complexType xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" name="ArrayOf_xsd_string">
<xsd:complexContent>
<xsd:restriction base="soapenc:Array">
<xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]" />
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" name="ArrayOf_tns1_SkuQuantity">
<xsd:complexContent>
<xsd:restriction base="soapenc:Array">
<xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="tns1:SkuQuantity[]" />
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
I know XI doesnt support array types thats why I have created my own structure as follows
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="retrieveInventory" type="InvArray" />
<xsd:complexType name="InvArray">
<xsd:sequence>
<xsd:element name="pOutletList" type="xsd:string" maxOccurs="unbounded" form="qualified" />
<xsd:element name="pSkuQuantityList" type="xsd:string" maxOccurs="unbounded" form="qualified" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
This webservice takes input like
storenumber1;storenumner2....
item1,qty;item2,qty.
I am passing values like this to my webservice. But still I am getting the same problThe problem doesn't seem to be related to the XI system. Have you done any configuration at receiver Webservice to convert the string data passed through XI into string array data? I think there is a mismatch in what XI sends and receiver expects.
Regards,
Prateek -
TestStand2.0 generates for each result property ( data, limits, status...) of each array element in a NumericArrayTest an extra line in the test report.
How can I change this to display all result properties of one array element in a single line?
How can I reduce the spaces between the property name and its value in the report?
How can I delete the message: "Measurement[x]" and display only the Measurement Alias (named in the Edit Limits menu)?
This means I like to change my report from:
Measurement[0] (ADC1):
Data: 5000
Status: Passed
Measurement[1] (AD
C2):
To:
ADC1: Data: 5000 Status: Passed
ADC2: ...Hi,
What you can do, is use the Override Callbacks for Modify the Report that is Generated.
Also you can also change the report sequence 'reportgen_txt.seq' to achieve the desired affect. If you go for modifying the report sequence then copy this to the User folder and then make your changes.
In the Resources Library you can find simple examples were the report has been modified by either using the Override Callbacks or by modifying the actual sequence.
One other item in the Report Options you will have to set the 'Select a Report Generator for Producing the Report Body' control to use the Sequence instead of the DLL.
Hope this helps
Ray Farmer
Regards
Ray Farmer -
Using a SOAP request to initiate an ESB flow
I'm currently attempting to use the Oracle ESB as a pure routing engine for a project at work. Heres the basic way to works:
1. We get a SOAP request from a third party
2. We transform that request into a canonical format (via xslt)
3. Inside that canonical format there will be an ID
4. We look up that ID in a database and resolve an IP address from it
5. We then use the canonical message to invoke a named web service on a SOAP server living at that IP
So my questions are two fold really:
Firstly, is it possible to fire off an ESB flow via a SOAP web service call? So far it seems (to me) that i can only initiate processes [flows - sorry im used to BPEL!] via an adapters (files, AQ, JMS, etc) and not from a raw SOAP request. It seems the SOAP object is an ESB object and not an incoming/outgoing adapter
and
Secondly, is it possible to make a database call/query and then use the result of that to intelligently route my canonical data to a specific SOAP server dynamically?
I know i can do this in BPEL with little trouble but im trying see if its also plausible via ESB so i can leverage the performance and management benefits that come bundled with it.
Any help would be great as i seem to be banging my head against a wall slightly!
Thanks in advance,
Ian HarriganThanks for the reply.
Would it be possible to use an IP address (obtained from a database query) to dynamically call a web service of the same name but on different servers?
Ie, if the incoming message has an ID attribute within it of, say, 10 then a request is made to server1, however if the ID is 11 then it goes to server2 and so on and so forth.
I know this would be possible using a static filter but, unfortunately, that would mean that every time a new ID/Server combination is added to the database a new version of the ESB would have to be deployed which isn't feasible.
Essentially i would need a single ESB and simply update the database with additional data and logic inside the ESB would send SOAP requests to a entirely new IP address
Thanks again,
Ian -
How to use XSLT for mapping feild names one by one to array element
I have a XSLT case to map all the attributes feild name(not value) which has no child to the target, which is array loop.
I give an sample below.
source:
<Items xmlns="http://www.example.org/sample">
<SourceSystem>SourceSystem2573</SourceSystem>
<TimeStamp>2010-01-17T20:54:08.234</TimeStamp>
<Item>
<ID>2574</ID>
<Type>2575</Type>
<Name>2576</Name>
</Item>
</Items>
source XSD like:
<element name="Items" type="tns:ItemsType"></element>
<complexType name="ItemsType">
<sequence>
<element name="SourceSystem" type="string" maxOccurs="1"
minOccurs="1">
</element>
<element name="TimeStamp" type="dateTime" maxOccurs="1"
minOccurs="1">
</element>
<element name="Item" type="tns:ItemType"
maxOccurs="unbounded" minOccurs="1">
</element>
</sequence>
</complexType>
<complexType name="ItemType">
<sequence>
<element name="ID" type="string" maxOccurs="1"
minOccurs="1">
</element>
<element name="Type" type="string" maxOccurs="1"
minOccurs="1">
</element>
<element name="Name" type="string" maxOccurs="1"
minOccurs="1">
</element>
</sequence>
</complexType>
target need to be like:
<ns1:AttributesCollection>
<ns1:Attributes>
<ns1:fieldname>SourceSystem</ns1:fieldname>
</ns1:Attributes>
<ns1:Attributes>
<ns1:fieldname>TimeStamp</ns1:fieldname>
</ns1:Attributes>
<ns1:Attributes>
<ns1:fieldname>ID</ns1:fieldname>
</ns1:Attributes>
<ns1:Attributes>
<ns1:fieldname>Type</ns1:fieldname>
</ns1:Attributes>
<ns1:Attributes>
<ns1:fieldname>Name</ns1:fieldname>
</ns1:Attributes>
</ns1:AttributesCollection>
target XSD:
<xs:element name="AttributesCollection" type="AttributesCollection"/>
<xs:complexType name="AttributesCollection">
<xs:sequence>
<xs:element name="Attributes" type="Attributes" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Attributes">
<xs:sequence>
<xs:element name="fieldname" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
I know we can use local-name() to get the tag/field name,
but I have not idea how to get these leaf field names one by one and then mapping to every array elements.
I tried whole day but no successful
Does anyone have some idea?
Thanks very much!
Keith
Edited by: user1065212 on 17-Jan-2010 22:50
Edited by: user1065212 on 17-Jan-2010 22:53
Edited by: user1065212 on 17-Jan-2010 22:59can you paste source xsd and the correct xml output, the current one isn't really valid
<ID>2574</TotalNumOfItems> -
My situation is that I have an array of clusters on the front panel. Each element is used for a particular test setup, so if the array size is three, it means we have three identical test setups that can be used. The cluster contains two string controls and a button: 'device ID' string, 'start' button and 'status' string.
In order to keep the diagrams simple, I would like to use a reference to the array as input into a subvi. This subvi will then modify a particular element in the array (i.e. set the 'status' string).
The first problem I encounter is that I can not select an array element to write to by using the reference. I have tried setting the 'Selection s
tart[]' and 'Selection size[]' properties and then querying the 'Array element' to get the proper element.
If I do this, the VI always seems to write to the element which the user has selected (i.e. the element that contains the cursor) instead of the one I am trying to select. I also have not found any other possible use for the 'Selection' properties, so I wonder if I am doing something wrong.
Of course I can use the 'value' property to get all elements, and then use the replace array element with an index value, but this defeats the purpose of leaving all other elements untouched.
I had hoped to use this method specifically to avoid overwriting other array elements (such as happens with the replace array element) because the user might be modifying the second array element while I want to modify the first.
My current solution is to split the array into two arrays: one control and one indicator (I guess that's really how it should be done ;-) but I'd still like to know ho
w to change a single element in an array without affecting the others by using a reference in case I can use it elsewhere.> My situation is that I have an array of clusters on the front panel.
> Each element is used for a particular test setup, so if the array size
> is three, it means we have three identical test setups that can be
> used. The cluster contains two string controls and a button: 'device
> ID' string, 'start' button and 'status' string.
>
> In order to keep the diagrams simple, I would like to use a reference
> to the array as input into a subvi. This subvi will then modify a
> particular element in the array (i.e. set the 'status' string).
>
It isn't possible to get a reference to a particular element within an
array. There is only one reference to the one control that represents
all elements in the array.
While it may seem better to use references to update
an element within
an array, it shouldn't really be necessary, and it can also lead to
race conditions. If you write to an element that has the
possibility of the user changing, whether you write with a local, a
reference, or any other means, there is a race condition between the
diagram and the user. LV will help with this to a certain extent,
especially for controls that take awhile to edit like ones that use
the keyboard. In these cases, if the user has already started entering
text, it will not be overwritten by the new value unless the key focus
is taken away from the control first. It is similar when moving a slider
or other value changes using the mouse. LV will write to the other values,
but will not rip the slider out of the user's hand.
To completely avoid race conditions, you can split the array into user
fields and indicators that are located underneath them. Or, if some
controls act as both, you can do like Excel. You don't directly type
into the cell. You choose w
hich cell to edit, but you modify another
location. When the edit is completed, it is incorporated into the
display so that it is never lost.
Greg McKaskle -
Error while sending SOAP Request to server through XML Spy
i have created a webservice to jdbc scenario application and when i tried to check my webservice with XML Spy by giving inputs to wsdl file as SOAP Request to server, its showing the error like this:
<b><u>Http error : could not POST File</u></b>
It would be good if u explain step by step procedure how to solve the issue.
Thanks & Regards.,
Pushparaju.BThis is the error showing after clicking OK button after it showed the error
Http error : could not POST File
<b><?xml version="1.0"?>
<!-- see the documentation -->
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP:Body>
<SOAP:Fault>
<faultcode>SOAP:Server</faultcode>
<faultstring>Server Error</faultstring>
<detail>
<s:SystemError xmlns:s="http://sap.com/xi/WebService/xi2.0">
<context>XIAdapter</context>
<code>DeliveryException</code>
<text><![CDATA[
com.sap.aii.af.ra.ms.api.DeliveryException: XIServer:PL_TIMEOUT:
at com.sap.aii.adapter.xi.ms.XIEventHandler.onTransmit(XIEventHandler.java:451)
at com.sap.aii.af.ra.ms.impl.core.queue.CallConsumer.onMessage(CallConsumer.java:125)
at com.sap.aii.af.ra.ms.impl.core.queue.Queue.run(Queue.java:831)
at com.sap.engine.frame.core.thread.Task.run(Task.java:64)
at com.sap.engine.core.thread.impl5.SingleThread.execute(SingleThread.java:79)
at com.sap.engine.core.thread.impl5.SingleThread.run(SingleThread.java:150)
]]></text>
</s:SystemError>
</detail>
</SOAP:Fault>
</SOAP:Body>
</SOAP:Envelope></b>
yes i have the role of XIAPPLUSER
scenario has created by me and i have the authorization to enter into XI -
Error with SOAP Request to calendar web service
Hi
I'm sending the following SOAP request to a calendar web service to create an appointment in the calendar. The response returns what seems to be a syntax error ("The Create method did not have a proper element in the request") but I can't see the cause of the fault. Any suggestions on what it may be? It's an 11g DB.
Many thanks
-x-POST-x-
POST /ocws-bin/ocas.fcgi HTTP/1.0
Content-Type: text/xml; charset="utf-8"
Content-Length: 993
SOAPAction: SOAPAction: "http://www.oracle.com/WebServices/Calendaring/1.0/Create"
Connection: close
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header><auth:BasicAuth xmlns:auth="http://soap-authentication.org/2002/01/">
<Name>CalendarName</Name><Password>CalendarPassword</Password>
</auth:BasicAuth> </SOAP-ENV:Header>
<SOAP-ENV:Body><cwsl:Create xmlns:cwsl="http://www.oracle.com/WebServices/Calendaring/1.0/"><CmdId>ITS APPOINTMENT</CmdId><iCalendar>
<vcalendar prodid="-//Oracle//Calendaring//Calendarlet//EN" version="2.0">
<vevent><class>PUBLIC</class>
<description>Calendar Body</description>
<dtstart value="DATE-TIME">20102905T120000</dtstart>
<duration>P00DT0H30M00S</duration>
<location>Location of user</location>
<summary>Incident ID - (name of user])</summary>
<uid>XGjRVnpReQALNsILlBlvcyXGCoUyXF</uid>
<x-oracle-eventtype>APPOINTMENT</x-oracle-eventtype>
<priority>5</priority>
</vevent>
</vcalendar>
</iCalendar></cwsl:Create></SOAP-ENV:Body></SOAP-ENV:Envelope>
-x-RESPONSE-x-
HTTP/1.1 500 Internal Server Error
Date: Thu, 27 May 2010 08:22:16 GMT
Server: Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.7a mod_fastcgi/2.4.6
OCAS-ProcTime: 407
Connection: close
Content-Type: text/xml; charset=utf-8
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server.Error::System::SOAPRequest</faultcode>
<faultstring>The Create method did not have a proper element in the request</faultstring>
<detail>
<cwsl:Error xmlns:cwsl="http://www.oracle.com/WebServices/Calendaring/1.0/">
<Class>Error::System::SOAPRequest</Class>
<Code>0020-00-00-00000034</Code>
<Line>3180</Line>
<FileName>SOAPRequestHandler.cpp,v</FileName>
<Version>1.57</Version>
<LastMod>2007/05/30 21:13:25</LastMod>
<Author>pscattol</Author>
<Date>Thu May 27 09:22:16 2010</Date>
<PID>26152</PID>
<TID>3044838304</TID>
<Level>Error</Level>
</cwsl:Error>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>Hi,
I am having problem using dii client, while sending a
request to c# webservice. error follows
QName QNAME_TYPE_STRING = new QName(NS_XSD,
"string");
call.setReturnType(QNAME_TYPE_STRING);
call.setOperationName(new QName(BODY_NAMESPACE_VALUE,
"GetDetails"));
call.addParameter("String_1", QNAME_TYPE_STRING,
ParameterMode.IN);Do you need another call to addParameter here?
String[] params = { "02", "2004" };
String result = (String)call.invoke(params);
Maybe you are looking for
-
Home button does not work.
Home(Hjem) in Norwegian language stoped working in my web site's web version, have tried it in IE & Firefox. It works normal in tablet and smart phone versions. Can anyone help me fix the isse? thanks !
-
I am struggling to find a way to copy and paste words from the dictionary into a text message and/or email.. ctrl c and v don't seem to operate :-( If this is not possible with the built in dictionary, would anyone be able to advise me if there's ano
-
How do we create a panel with a title on it
How do we create a panel with a title on it (something like the titled border in java swing)
-
How to back up iPhoto Library to an external source?
I am using OS X Mavericks with iPhoto v9.5.1. This morning iPhoto tells me my photo library is either in use by another application or has become unreadable. Stupidly I have not backed it up. I am reluctant to try making a repair for fear of losing
-
Group Personnel Subarea for Work Schedule
Hi All, I am learning SAP HCM ECC 6.0 at the moment, I have created Personnel Area, Personnel Subarea however when I am trying to u201CGroup Personnel Subarea for Work Scheduleu201D the newly created Personnel Areas and Personnel Subarea are not appe