将eBay SOAP响应转换为Java对象
我已经设置了eBay通知,我想将通知内容(即SOAP XML)转换为GetItemTransactionResponse Java对象。下面是我正在使用的代码将eBay SOAP响应转换为Java对象,java,xml,web-services,soap,ebay-api,Java,Xml,Web Services,Soap,Ebay Api,我已经设置了eBay通知,我想将通知内容(即SOAP XML)转换为GetItemTransactionResponse Java对象。下面是我正在使用的代码 SOAPMessage message = MessageFactory.newInstance().createMessage(null, new ByteArrayInputStream( CONVERT_EBAY_NOTIFICATION_
SOAPMessage message = MessageFactory.newInstance().createMessage(null,
new ByteArrayInputStream(
CONVERT_EBAY_NOTIFICATION_TO_BYTE_ARRAY_METHOD()
));
SOAPEnvelope soapEnv = message.getSOAPPart().getEnvelope();
SOAPBody soapBody = message.getSOAPBody();
JAXBContext content = JAXBContext.newInstance(GetItemTransactionsResponseType.class);
Unmarshaller unmarshaller = content.createUnmarshaller();
JAXBIntrospector jaxbIntrospector = content.createJAXBIntrospector();
Object transactionObject = unmarshaller.unmarshal(soapBody, GetItemTransactionsResponseType.class);
GetItemTransactionsResponseType transaction = (GetItemTransactionsResponseType)jaxbIntrospector.getValue(transactionObject);
我以为这会将SOAP XML转换为相应的eBay对象,但它不起作用,因为“transaction”对象为空。。。我试图访问“transaction”对象中的变量
我收到NullPointerException
然后检查soapBody对象,查看是否传入了导致NullPointerException的空内容
soapBody.getTextContent()
我可以看到soapBody对象中的文本内容。它不是空的
我非常感谢任何能解决这个问题的帮助。不确定是否正确转换了SOAP XML。提前谢谢 我总算解决了这个问题 我实际上需要使用文档获取SOAP XML的主体部分:
Document document = soapBody.extractContentAsDocument();
然后,我将文档对象而不是SOAPBody对象解组为对象:
Object transactionObject = unmarshaller.unmarshal(document);
最后,我使用JAXBIntrospector获取对象值,并将对象强制转换为GetItemTransactionResponseType类,就像我最初做的那样:
GetItemTransactionsResponseType transaction = (GetItemTransactionsResponseType)jaxbIntrospector.getValue(transactionObject);
我将把代码留在这里,希望能帮助像我一样挣扎的人
SOAPMessage message = MessageFactory.newInstance().createMessage(null,
new ByteArrayInputStream(
REPLACE_THIS_WITH_YOUR_IMPLEMENTATION_TO_GET_YOUR_SOURCE()
));
SOAPBody soapBody = message.getSOAPBody();
Document document = soapBody.extractContentAsDocument();
JAXBContext content = JAXBContext.newInstance(GetItemTransactionsResponseType.class);
Unmarshaller unmarshaller = content.createUnmarshaller();
JAXBIntrospector jaxbIntrospector = content.createJAXBIntrospector();
Object transactionObject = unmarshaller.unmarshal(document);
GetItemTransactionsResponseType transaction = (GetItemTransactionsResponseType)jaxbIntrospector.getValue(transactionObject);
SOAPMessage message = MessageFactory.newInstance().createMessage(null,
new ByteArrayInputStream(
REPLACE_THIS_WITH_YOUR_IMPLEMENTATION_TO_GET_YOUR_SOURCE()
));
SOAPBody soapBody = message.getSOAPBody();
Document document = soapBody.extractContentAsDocument();
JAXBContext content = JAXBContext.newInstance(GetItemTransactionsResponseType.class);
Unmarshaller unmarshaller = content.createUnmarshaller();
JAXBIntrospector jaxbIntrospector = content.createJAXBIntrospector();
Object transactionObject = unmarshaller.unmarshal(document);
GetItemTransactionsResponseType transaction = (GetItemTransactionsResponseType)jaxbIntrospector.getValue(transactionObject);