2014-03-05 5 views
1

XDS의 일부인 RetrieveDocumentSetResponse에 대해 MTOM을 언 마샬링하는 데 문제가 있습니다.JAXB MTOM을 사용하여 언 마샬링

내 생성 된 JAXB 파일에는 요소 문서가 단순히 byte[]입니다. 나는 보통 unmarshalling 단계를 수행 한 후 :

final JAXBContext jc = JAXBContext.newInstance(RetrieveDocumentSetResponseType.class); 
final Unmarshaller u = jc.createUnmarshaller(); 

final JAXBElement<RetrieveDocumentSetResponseType> rdsJaxb = u.unmarshal(
        soapResponse.getSOAPBody().getElementsByTagNameNS("urn:ihe:iti:xds-b:2007", "RetrieveDocumentSetResponse").item(0), 
        RetrieveDocumentSetResponseType.class); 
final RetrieveDocumentSetResponseType rdsResp = rdsJaxb.getValue(); 

내 문서는 비어 : rdsResp.getDocument().length == 0.

TCPMonitor으로 확인하면 문서가 줄을 통해 전송되는 것을 볼 수 있으므로 오류는 비 정렬 화 어딘가에 있어야합니다.

바이트 [] 대신 DataHandler을 사용하고 @XMLMimeType 주석이있는 문서 변수에 주석을 달지 않았습니다. TomEE를 JAXB의 RI 버전을 사용하는 배포 타겟으로 사용하고 있습니다.

나는 또한 MTOM 수 있도록해야하고, 웹 서비스 호출에 대해 정기적으로 파견을 사용하고

:

final Service repoService; 
final QName repoPort = new QName(XdsProperties.XDS_REPOSITORY_NAMESPACE, XdsProperties.XDS_REPOSITORY_PORT); 
     if (XdsProperties.XDS_REPOSITORY_WSDL == null) { 
      repoService = Service.create(new QName(XdsProperties.XDS_REPOSITORY_NAMESPACE, XdsProperties.XDS_REPOSITORY_SERVICE)); 
     } else { 
      repoService = Service.create(XdsProperties.XDS_REPOSITORY_WSDL, new QName(XdsProperties.XDS_REPOSITORY_NAMESPACE, 
        XdsProperties.XDS_REPOSITORY_SERVICE)); 
     } 
     repoService.addPort(repoPort, SOAPBinding.SOAP12HTTP_MTOM_BINDING, XdsProperties.XDS_REPOSITORY_ENDPOINT); 
final MTOMFeature mtomFt = new MTOMFeature(true); 
REPOSITORY_DISPATCH = repoService.createDispatch(repoPort, SOAPMessage.class, Service.Mode.MESSAGE, addrFt, mtomFt); 

을 그리고도 수행

REPOSITORY_DISPATCH.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, soapAction);  
final SOAPBinding binding = (SOAPBinding) REPOSITORY_DISPATCH.getBinding();   
binding.setMTOMEnabled(true); 

정말 무슨 일이 일어나고 있는지 확실하지 않다 잘못되거나 예외가 던져지지 않기 때문에 내가해야 할 일은 문서가 항상 비어있는 것입니다.

답변

0

JAXB 비 정렬 화 중에 첨부 파일을 해결하려면 AttachmentUnmarshallerUnmarshaller에 설정해야합니다. JAXB는 JAX-WS 의해 내부적으로 활용 될 때

이 자동적으로 처리된다. XML과 직접 상호 작용하는 경우 AttachmentUnmarshaller을 구현하고 설정해야합니다.

: 다음은 도움이 될 것입니다 예에 대한 링크입니다
관련 문제