将eBay SOAP响应转换为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_

我已经设置了eBay通知,我想将通知内容(即SOAP XML)转换为GetItemTransactionResponse Java对象。下面是我正在使用的代码

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