java - SOAPMessage.getMessageBody() 打印 null

标签 java soap jaxb

各位,我不明白如果message.getSOAPBody()打印为null,那么为什么unmarshaller.unmarshal(message.getSOAPBody(), Person.class);返回一个值给变量 jb。请帮助我理解。

String example="<SOAP:Envelope 
xmlns:SOAP=\"http://schemas.xmlsoap.org/soap/envelope/\">"
    + "<SOAP:Body>"        
    + "<firstName>Jane</firstName>"
    + "<lastName>Doe</lastName>"        
    + "</SOAP:Body>"
    + "</SOAP:Envelope>";

ByteArrayInputStream  bas=new ByteArrayInputStream(example.getBytes());

try {
  SOAPMessage message = MessageFactory.newInstance().createMessage(null,bas);
  System.out.println(message.getSOAPBody().toString());
  JAXBContext jc = JAXBContext.newInstance(Person.class);
  Unmarshaller unmarshaller = jc.createUnmarshaller();

  System.out.println(message.getSOAPBody()); // this prints null
  System.out.println(message.getSOAPBody().toString()); // this prints null
  JAXBElement<Person> jb = unmarshaller.unmarshal(message.getSOAPBody(), Person.class); // I am not able to undestand if above lines return null, then how come this line populates jb

  Person p = jb.getValue();
  System.out.println(p.firstName); // prints Jane
  System.out.println(p.lastName); // prints Doe
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
} catch (SOAPException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}

最佳答案

这是程序的输出:

[SOAP:Body: null]
[SOAP:Body: null]
[SOAP:Body: null]
Jane
Doe

You are checking wrong method, you should try changing message.getSOAPBody().toString() to message.getSOAPBody().getTextContent() or getChildNodes() etc to validate the message content.

以下是 message.getSOAPBody().getTextContent() 的输出

[SOAP:Body: null]
[SOAP:Body: null]
JaneDoe
Jane
Doe

关于java - SOAPMessage.getMessageBody() 打印 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45431195/

相关文章:

java - 在 MongoDB 和 Java 中从 DbCursor 创建列表

java - 从数组中选择前 10 个最常出现的字符串,java

php - 多个 NuSOAP 客户端导致 "Undefined index: _transient"错误

java - JAXB 编码/解码 NullpointerException 困境

java - 使用 JAXB 从未编码的 java 对象获取 xml 元素名称

java - 安卓工具栏

swift - 使用 Swift 使用 SOAP Web 服务

java - jar 文件是什么 - "org.jvnet.jax_ws_commons.dime.binding.DimeBindingID"

java - 从 Spring-Jersey 1.x 迁移到 2.x

java - 下标规则和一维数组