转换易趣SOAP响应Java对象

问题描述 投票:0回答:1

我有eBay的通知设置,我想通知内容(这是SOAP,XML)来GetItemTransactionsResponse 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.getItem() 

我收到NullPointerException异常...

然后我检查我的SOAPBody对象,看看我传递空的内容,导致空指针异常

soapBody.getTextContent()

我可以看到的SOAPBody对象中的文本内容。它不是空的!

我会很感激,可以解决这个问题的任何帮助。不知道如果我不正确地转换SOAP XML。提前致谢!

java xml web-services soap ebay-api
1个回答
0
投票

好了不知何故,我设法找到了这个问题。

其实,我需要获得使用文档的XML SOAP的主体部分:

Document document = soapBody.extractContentAsDocument();

然后我解组Document对象,而不是SOAPBody对象,进入对象:

Object transactionObject = unmarshaller.unmarshal(document);

最后我用JAXBIntrospector获取对象的值,也强制转换对象GetItemTransactionsResponseType类像我所做的最初:

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);
© www.soinside.com 2019 - 2024. All rights reserved.