2016-05-04 6 views
1

Ich habe einen Webservice, der ein Objekt zurückgibt, das ein Array enthält. Die Bean-Klassen, die ich von wsdl4j generiert habe. Wenn ich den Service aufruft, gibt das Objekt immer die richtigen Felder zurück, aber das Array hat immer nur einen Eintrag. Die Webservice-Antwort hat zwei Einträge, aber irgendwo in Axis geht der zweite Eintrag verloren. Der Dienst scheint in Ordnung zu sein, nur die Verarbeitung im Axis-Code scheint falsch zu sein.Achse 1.4 deserialize Arrays nicht richtig

Dies ist der Inhalt des Antworttext am Ende

[<projectDataReturn xsi:type="ns4:ProjectDataResult" xmlns:ns4="http://results.ws.appserver.secutrial.de" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <errorCode xsi:type="xsd:int">0</errorCode> 
    <message xsi:type="soapenc:string" xsi:nil="true" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/> 
    <statusCode xsi:type="xsd:int">1</statusCode> 
    <project xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">HAHA</project> 
    <centres xsi:type="ns5:CentreBean" xmlns:ns5="http://beans.eo.secutrial.de"><name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center1</name></centres> 
    <centres xsi:type="ns6:CentreBean" xmlns:ns6="http://beans.eo.secutrial.de"><name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center2</name></centres> 
</projectDataReturn>] 

So habe ich nur in der CentreBean Array des ProjectDataResult "Center2" erhalten. Ich habe Single-Step-Debugging versucht, aber keinen Erfolg.

Ich habe die Methode RPCElement.publishToHandler() gefunden, nach der die Parameter des RPCEelements falsch sind. Die Methode gibt einige SAX-Ereignisse wieder (org.apache.axis.message.SAX2EventRecorder), beide CentreBeans werden verarbeitet, aber nur der letzte Teil wird zum Ergebnis.

Hat jemand das behoben?

Antwort

1

Ich denke, das Problem ist, wie der Webservice gestaltet ist.

Die Center sollten ein komplexer Typ sein, der mehrere Center-Daten senden kann. (Arraytype)

So idealerweise der Web-Service haben sollte

[<projectDataReturn xsi:type="ns4:ProjectDataResult" xmlns:ns4="http://results.ws.appserver.secutrial.de" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<errorCode xsi:type="xsd:int">0</errorCode> 
<message xsi:type="soapenc:string" xsi:nil="true" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/> 
<statusCode xsi:type="xsd:int">1</statusCode> 
<project xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">HAHA</project> 
<centres xsi:type="ns5:CentreBean" xmlns:ns5="http://beans.eo.secutrial.de"> 
    <centre> 
     <name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center1</name> 
    </centre> 
    <centre> 
     <name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center1</name> 
    </centre> 
</centres> 

]

Rückkehr Also, was ich versuche, hier zu sagen, der "Center" soll eine Bohne, die eine hat Array-Typ von "Center" -Bohnen und jedes Center wird den String-Typ-Namen haben.

Wenn der Webservice auf diese Weise Daten zurückgibt, generiert die Achse Stubs, wie oben erwähnt, und Sie können Centers als Array abrufen.

Jetzt läuft es durch beide Zentren und da es kein Array-Typ ist, wird der Centre1-Wert von Centre2 überschrieben, wenn er den zweiten Wert liest.

+0

Das ist möglich, aber ich kann den Dienst nicht ändern, es wird von einer externen Website verwaltet. – arothe

+0

Ich habe das Problem mit http://stackoverflow.com/a/37549073/1503313 gelöst – arothe

Verwandte Themen