Apache Axis: SOAP Nachricht komplett per Hand erstellen?Wie?

Alles, was den Apache betrifft, kann hier besprochen werden.

Apache Axis: SOAP Nachricht komplett per Hand erstellen?Wie?

Postby KaySquare » 17. April 2007 19:24

Hi,

ich versuche eine Lösung zu finden, um einen SOAP-Request komplett per Hand ohne WSDL-Datei zu erzeugen. Grund ist, dass wsdl2java zwar anhand der WSDL-Datei Stubs erzeugen kann, jedoch ist der Code fehlerhaft/unvollständig. Ergibnisse von 2 der 3 möglichen Procedures sind nicht vollständig.
Daher will ich den Code per Hand erzeugen. Bisher geht dies auch ganz gut:

<snip: JAVA CODE MIT APACHE AXIS 1>
String endpoint =
"http://**hidden**";

Service webservice = new Service();
Call webserviceCall = (Call) webservice.createCall();

webserviceCall.setTargetEndpointAddress( new java.net.URL(endpoint) );

webserviceCall.setOperationName(new QName(null, "IPS_SubServiceCall"));
webserviceCall.setEncodingStyle( "http://schemas.xmlsoap.org/soap/encoding/" );
webserviceCall.setOperationStyle("rpc");

webserviceCall.addParameter("SID", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
webserviceCall.addParameter("SERVICE", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
webserviceCall.addParameter("SUBSERVICE", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
// THAT's WRONG:
webserviceCall.addParameter("REQUESTMAP", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);

webserviceCall.setReturnType(org.apache.axis.Constants.XSD_STRING);

Object o = (Object) webserviceCall.invoke( new Object[] {sessionID, service, subservice, "requestmap"} );
MessageContext mc = webserviceCall.getMessageContext();
String response = mc.getResponseMessage().getSOAPPartAsString();
StringReader strReader = new StringReader(response);
InputSource inputsrc = new InputSource(strReader);
Document document = XMLUtils.newDocument(inputsrc);
/* nothing to scan for (here)
XPath xpath = XPathFactory.newInstance().newXPath();
String expressionForERRORCODE = "//ERRORCODE";
String ips_errorcode = xpath.evaluate(expressionForERRORCODE, document);
*/
</java-code>

Nun muss ich noch die Requestmap per Hand bauen, weiß jedoch absolut nicht, wie ich diesen Teil erzeuge. In der WSDL-Datei (rpc-encoded style) ist dies ein benutzerdefinierter Datentyp. Der SOAP-Request muss folgendes Format haben:

<snip: SOAP>
<CALLER s:type="y:string">USER</CALLER>
<SID s:type="y:string">TEST:1264335072</SID>
<SERVICE s:type="y:string">METASEARCH</SERVICE>
<SUBSERVICE s:type="y:string">INITSEARCH</SUBSERVICE>
<REQUESTMAP s:type="ns1:Map" xmlns:ns1="http://xml.apache.org/xml-soap">
<item>
<key s:type="y:string">TEMPLATE</key>
<value s:type="y:string">FALSE</value>
</item>
<!-- probably even more items -->
<item>
<key s:type="y:string">COUNT</key>
<value s:type="y:string">20</value>
</item>
<item>
<key s:type="y:string">START</key>
<value s:type="y:string">0</value>
</item>
</REQUESTMAP>
</m:IPS_SubServiceCall>
</E:Body>
</E:Envelope>

</soap>

Die WSDL-Datei könnt ihr hier finden: http://www.file-upload.net/download-251 ... .wsdl.html


DANKE für eure Tipps, ich komm hier gerade nicht weiter.

Kay²
KaySquare
 
Posts: 1
Joined: 17. April 2007 19:12

Return to Apache

Who is online

Users browsing this forum: No registered users and 4 guests