Hallo zusammen,
ich habe ein paar WebServices erstellt, welche einen komplexen eigenen Datentyp an den Requestor als Antwort zurücksenden.
Diesen komplexen Datentyp - nennen wir ihn ReturnedData - habe ich als Bean implementiert und kann ihn daher schön einfach über die BeanSerializerFactory und BeanDeserializerFactory deployen.
Nun wollte ich zusätzlich über einen responseFlow und eine eigene Handler-Klasse den zurückgegebenen Datentyp aber in Abhängigkeit des Requestors mal als komplexen und mal als simplen Datentyp (z.B. nur als String, welcher aus dem komplexen Typ erzeugt wird) zurückgeben lassen.
Zur Veranschaulichung:
ist die Rückgabe des komplexen Datentypes.
Im besagten responseFlow-Handler wollte ich gegebenenfalls nun z.B. den Wert der returnMsg auslesen und Stelle des komplexen ReturnedData nur einen ReturnedString zurückgeben. Und dies ist derzeit mein Problem: Ich versuche den SOAPBody zu deserialisieren und neu aufzubauen. Aber schon beim deserialisieren habe ich meine Probleme. So komme ich zum Beispiel schon gar nicht an die Values der Elemente ran.
ist ein (misslungener) Versuch.
Hat jemand einen Tipp?
Danke
yrkoon
ich habe ein paar WebServices erstellt, welche einen komplexen eigenen Datentyp an den Requestor als Antwort zurücksenden.
Diesen komplexen Datentyp - nennen wir ihn ReturnedData - habe ich als Bean implementiert und kann ihn daher schön einfach über die BeanSerializerFactory und BeanDeserializerFactory deployen.
Nun wollte ich zusätzlich über einen responseFlow und eine eigene Handler-Klasse den zurückgegebenen Datentyp aber in Abhängigkeit des Requestors mal als komplexen und mal als simplen Datentyp (z.B. nur als String, welcher aus dem komplexen Typ erzeugt wird) zurückgeben lassen.
Zur Veranschaulichung:
Code:
HTTP/1.1 200 OK
Content-Type: text/xml;charset=utf-8
Date: Tue, 22 Mar 2005 17:30:50 GMT
Server: Apache-Coyote/1.1
Connection: close
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
<soapenv:Body>
<ns1:getHelloWorldResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://localhost:8082">
<getHelloWorldReturn href="#id0"/>
</ns1:getHelloWorldResponse>
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:ReturnedData" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://webServiceTester">
<internalFunctionHandler xsi:type="soapenc:string">0</internalFunctionHandler>
<returnCode xsi:type="soapenc:string"></returnCode>
<returnCodeClass xsi:type="soapenc:string">0</returnCodeClass>
<returnDS xsi:type="soapenc:Array" xsi:null="true" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"/>
<returnMsg xsi:type="soapenc:string">returnMsg!</returnMsg>
<returnMsgLong xsi:type="soapenc:string">returnMsgLong!</returnMsgLong>
<returnResult xsi:type="soapenc:string"></returnResult>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>
ist die Rückgabe des komplexen Datentypes.
Im besagten responseFlow-Handler wollte ich gegebenenfalls nun z.B. den Wert der returnMsg auslesen und Stelle des komplexen ReturnedData nur einen ReturnedString zurückgeben. Und dies ist derzeit mein Problem: Ich versuche den SOAPBody zu deserialisieren und neu aufzubauen. Aber schon beim deserialisieren habe ich meine Probleme. So komme ich zum Beispiel schon gar nicht an die Values der Elemente ran.
Code:
Message outMsg = msgContext.getResponseMessage();
SOAPBody sb = outMsg.getSOAPEnvelope().getBody();
Iterator it = sb.getChildElements();
String returnValue = "";
while (it.hasNext()) {
javax.xml.soap.SOAPElement sbe = (javax.xml.soap.SOAPElement)it.next();
Iterator it2 = sbe.getChildElements();
while (it2.hasNext()) {
javax.xml.soap.SOAPElement sbee = (javax.xml.soap.SOAPElement)it2.next();
returnValue += sbee.getValue();
}
}
Hat jemand einen Tipp?
Danke
yrkoon