2012-05-23 4 views
0

이름이있는 Person과 같은 POJO를 작업 응답으로 직렬화하는 axis2 (Java)로 노출 된 SOAP 웹 서비스가 있습니다. 또한, 응답에 이진 첨부 파일을 넣기 위해 직렬화 된 DataHandler를 사용하는 작업이 있습니다.wsdl2cpp 클라이언트 측에서 MTOM 첨부 파일이 포함 된 wso2 cpp 코드 생성

wso2 wsfcpp에서 제공하는 wsdl2cpp를 사용하여 C++에서 클라이언트 측 코드를 생성했습니다. getPerson (personId) 조치가 정상적으로 작동하고 예상대로 결과가 나옵니다. 그러나 생성 된 코드가 제대로 작동하지 않는 것처럼 보이지만 getFile (someId) 액션은 성공적입니다.

enableMTOM = true로 설정된 서비스는 axis2.xml 및 클라이언트에서 설정됩니다. 나는 Options.setEnableMTOM (true)을 추가하여 클라이언트 측의 주 (main)에서 확실하게 보냈다.

나는이 문제가 getFile (someId) 응답의 봉투가 유효하기 때문에 wsdl에서 생성 된 코드라고 생각한다. (나는 axis2c API를 사용하여 수동으로 테스트했고 예상대로 파일을 검색 할 수있다) .

WSDL2CPP -uri MyService.xml -g -d adb -u -f 

: 여기

<xs:element name="getFileResponse"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="0" name="return" nillable="true" type="xs:base64Binary"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

클라이언트 코드를 생성하는 데 사용되는 커맨드 라인 : 여기

는 응답 (축 2 자바로부터 생성된다)은 WSDL에 포함 된 스키마이며 다음은 서비스에서받은 응답입니다.

<ns:getFileResponse xmlns:ns="http://services.myplace.com"> 
    <ns:return> 
     <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:[email protected]"></xop:Include> 
    </ns:return> 
</ns:getFileResponse> 

wsdl 또는 wsfcpp에 의해 구현되지 않은 기능 (MTOM 클라이언트 코드 생성 기능이있는 비누)입니까?

미리 감사드립니다.

답변

1

나는 gSoap과 같은 것을 시도했고 나는 같은 문제가 있었다. 나는 axis2가 바이너리의 최적화 여부를 자동으로 감지하는 것으로 생각했다. 또한, 어느 경우 든 wsdl에 의해 노출 된 반환 요소 유형은 type = "xs : base64Binary"입니다.

필자가 발견 한 유일한 해결책은 xs : base64Binary를 xop로 대체하여 패치하는 것이 었습니다. Python (또는 무엇이든) 스크립트를 사용하여 WSDL을 포함시킨 다음 코드를 생성합니다.

문제가 해결되었지만 유지 관리 문제가 발생했습니다.

관련 문제