2017-05-15 3 views
0

WSDL에서 생성 된 참조가 base64Binary 객체를 byte [] []로 해석하는 VS 2015에서 클라이언트 프록시를 생성하는 데 문제가 있습니다. 나는이 자바 웹 서비스의 WSDL의 생성에 문제가 확신Base64Binary를 byte [] []로 해석했습니다.

[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; 

:

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

그리고 생성 된 참조 :

다음은 WSDL 섹션입니다 그러나 조금 더 많은 경험을 가진 사람이라면 클라이언트 또는 서버 측에서 어떤 원인이 될 수 있는지에 대해 밝힐 수 있습니까?

base64Binary는 byte [] []가 아닌 string []으로 변환됩니다.

webservice가 base64 문자열을 원하지만 클라이언트 프록시가 바이트 배열 [] [] 배열을 강제로 사용해야하므로 작동하지 않습니다.

추가 정보 :

SOAPUI에서

이 웹 서비스에는 다음과 같은 코드가 작동 :

<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> 

그래서 이것은 나에게 (그들이 너무 긴으로 ommited 실제 base64로 문자열)을 base64로 문자열의 배열을 말한다 받아들입니다. 그렇다면 왜 Visual Studio가 WSDL을 기반으로 바이트 [] [] 데이터 유형을 생성 했습니까?

+0

'... 좀 더 많은 경험을 가진 사람이 ... 원인 일 수 있습니다 무엇에 빛을 수 있을까? '_what의 원인을? _ – Abion47

+0

"base64Binary 인은 [] [] 바이트로 해석 "... 나는 그것이 있어야한다고 생각하지 않아요 :) –

+0

하지만 xs : base64Binary는 클라이언트에서 문자열 []이 아니라 바이트 [] [...]가 아닌 것으로 해석되어야합니다. 웹 서비스가 바이트 배열의 바이트 배열이 아닌 base64 문자열의 배열을 예상하므로 byte [] []가 올바르지 않습니다. –

답변

0

기본적으로 JAXB는 Base64Binary xsd 데이터 형식에 대해 byte[] 매핑을 사용합니다.

이러한 바인딩은 모두 사용자 지정 바인딩 선언을 통해 전역 또는 사례 별 수준에서 재정의 될 수 있습니다.

http://docs.oracle.com/javaee/5/tutorial/doc/bnazq.html를 참조

관련 문제