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 버전을 사용하는 배포 타겟으로 사용하고 있습니다.
:
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);
정말 무슨 일이 일어나고 있는지 확실하지 않다 잘못되거나 예외가 던져지지 않기 때문에 내가해야 할 일은 문서가 항상 비어있는 것입니다.