Doubt about eclipse-generated SOAP Client

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Doubt about eclipse-generated SOAP Client

Leonardo K. Shikida
Hi

I've used eclipse to generate a SOAP client using axis 1.

This procedure usually works well, but for Oracle OIM, which exposes its Task API via SOAP, I am facing a specific problem so I'd like to know if you guys can help me on that.

What it seems to be the problem is that the Oracle OIM WSDL declares a response to a method that contains a XML element called "payload".

This XML element can contain arbitrary XML which is not declared in the WSDL. The payload element is mapped by Axis as a "java.lang.Object" and declared internally as "anyType".

The problem it seems, is that Axis tries to parse the contents of this payload element and returns an error saying that the element is unknown.

For example, the response XML looks like this

<tag>
<known tag1>some value here</known tag1>
<payload>
<unknown tag1>some other value</unknown tag1>
</payload>
<known tag2>some value here</known tag2>
</tag>

So for some reason, Axis tries to parse "unknown tag1" and since it's not declared anywhere (probably because the WSDL does not does so), it fails like this

org.xml.sax.SAXException: Invalid element in com.xyz.oim.client.taskserviceport.task.Task - EntityKey
    at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:258)
    at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
    at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
    at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
    at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
    at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
    at org.apache.axis.client.Call.invoke(Call.java:2467)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at com.xyz.oim.client.taskserviceport.taskService.TaskServiceSOAPBindingStub.updateTaskOutcome(TaskServiceSOAPBindingStub.java:8515)
    at com.xyz.test.TaskServicePortTestClient.main(TaskServicePortTestClient.java:24)
 
AxisFault
 faultCode: {<a href="http://schemas.xmlsoap.org/soap/envelope/}Server.userException">http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: org.xml.sax.SAXException: Invalid element in com.xyz.oim.client.taskserviceport.task.Task - EntityKey
 faultActor: 
 faultNode: 
 faultDetail: 
    {<a href="http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException">http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: Invalid element in com.xyz.oim.client.taskserviceport.task.Task - EntityKey
    at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:258)
    at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
    at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
    at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
    at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
    at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
    at org.apache.axis.client.Call.invoke(Call.java:2467)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at com.xyz.oim.client.taskserviceport.taskService.TaskServiceSOAPBindingStub.updateTaskOutcome(TaskServiceSOAPBindingStub.java:8515)
    at com.xyz.test.TaskServicePortTestClient.main(TaskServicePortTestClient.java:24)
 
    {<a href="http://xml.apache.org/axis/}hostname:68G1ZR1">http://xml.apache.org/axis/}hostname:68G1ZR1
 
org.xml.sax.SAXException: Invalid element in com.xyz.oim.client.taskserviceport.task.Task - EntityKey
    at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
    at org.apache.axis.client.Call.invoke(Call.java:2470)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at com.xyz.oim.client.taskserviceport.taskService.TaskServiceSOAPBindingStub.updateTaskOutcome(TaskServiceSOAPBindingStub.java:8515)
    at com.xyz.test.TaskServicePortTestClient.main(TaskServicePortTestClient.java:24)
Caused by: org.xml.sax.SAXException: Invalid element in com.xyz.oim.client.taskserviceport.task.Task - EntityKey
    at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:258)
    at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
    at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
    at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
    at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
    at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
    at org.apache.axis.client.Call.invoke(Call.java:2467)
    ... 4 more


I've done some research trying to find  away to ignore the contents of "payload", or manually including the "payload" contents into the parent XML structure, but my feeling is that something is not right, or even if it was possible to modify the XML inside the Axis parser.

Any help is very welcome.

TIA

Leo