2017-05-15 6 views
0

Ich habe ein Problem mit der Generierung eines Client-Proxy in VS 2015, wo die von der WSDL generierte Referenz ein base64Binary-Objekt als ein Byte [] [] interpretiert.Base64Binary interpretiert als Byte [] []

Hier ist der WSDL-Abschnitt:

<xs:complexType name="putPlanning"> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="data" type="xs:base64Binary" /> 
    </xs:sequence> 
    </xs:complexType> 

Und in der generierten Referenz:

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="xxx.xxx.xxx", Order=8)] 
    [System.Xml.Serialization.XmlElementAttribute("data", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="base64Binary")] 
    public byte[][] data; 

Ich bin ziemlich sicher, das ein Problem mit der Generierung der WSDL unter dem Web-Service-Java ist, Aber könnte jemand mit etwas mehr Erfahrung ein Licht auf das werfen, was die Ursache auf der Client- oder Serverseite sein könnte?

Ich würde erwarten, dass Base64Binary als Zeichenfolge [] und nicht Byte [] [] übersetzt.

Dies funktioniert nicht, da ich erwarte, dass der Webservice Base64-Strings will, aber der Client-Proxy erzwingt ein byte [] [] Array von Arrays.

Weitere Infos:

In SOAPUI die folgenden Code Arbeit mit diesem Web-Service:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:psw="http://xxx.xxx.xxx/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <psw:putPlanning> 
     <!--Zero or more repetitions:--> 
     <data>*base64string==*</data> 
     <data>*base64string==*</data> 
     </psw:putPlanning> 
    </soapenv:Body> 
</soapenv:Envelope> 

so das sagt mir, eine Reihe von base64-Strings (tatsächliche base64 String ommited, da sie zu lang sind) ist akzeptiert. Die Frage ist also, warum Visual Studio einen Byte [] [] -Datentyp basierend auf der WSDL generiert hat?

+0

'... könnte jemand mit einem wenig mehr Erfahrung ein Licht auf leuchten, was die Ursache sein könnte ...?' Die Ursache der _was? _ – Abion47

+0

„base64Binary als Byte interpretiert [] [] "... Ich denke nicht, dass es sein sollte :) –

+0

Aber xs: base64Binary sollte am Client als String [] und nicht Byte [] [] interpretiert werden ... ich vermisse etwas, das ist das ganze Problem hier , ein Byte [] [] ist nicht korrekt, da der Web-Service ein Array von base64-Strings erwartet, kein Byte-Array von Byte-Arrays. –

Antwort

0

Standardmäßig verwendet JAXB byte[] Zuordnung für Base64Binary xsd Datentyp.

Alle diese Bindungen können global oder von Fall zu Fall mithilfe einer benutzerdefinierten Bindungsdeklaration überschrieben werden.

Siehe http://docs.oracle.com/javaee/5/tutorial/doc/bnazq.html

Verwandte Themen