在 Java 中写入 XML SOAP 消息

Writing an XML SOAP message in Java

我有以下接受 xml 的方法,我对内容进行了一些数据馈送。 我也应该 return 一条 SOAP 消息,大致如下:

<ow-e:Envelope revision='2.0' xmlns:ow-e='http://www.url.com/test-envelope'>
   <ow-e:Header>
      <ow-e:Properties>
         <ow-e:SentAt>2004-12-14T13:54:36</ow-e:SentAt>
         <ow-e:Topic>SOME_STRING</ow-e:Topic>
      </ow-e:Properties>
   </ow-e:Header>
</ow-e:Envelope>

所以现在我正在做的是:

String some_string = "qwe";
String response = "";

response = "<ow-e:Envelope revision='2.0' xmlns:ow-e='http://www.url.com/test-envelope'><ow-e:Header><ow-e:Properties><ow-e:SentAt>2004-12-14T13:54:36</ow-e:SentAt><ow-e:Topic>" + some_string + "</ow-e:Topic></ow-e:Properties></ow-e:Header></ow-e:Envelope>";

return response;

这绝对是可怕的。知道我怎样才能让它更容易忍受吗?目前无法使用框架。

这是我第一次处理 SOAP messages/responses,感觉就像来自 REST 的地狱。我可能需要创建某种层次结构来正确填充值,但我不确定如何在没有任何框架的情况下仅使用 Java 来完成。

您提到使用框架不是一种选择,但您的平台可能提供更轻量级的东西:

  • JAXB. JAXB allows you to map Java classes to XML representations using annotations. It's far better than doing marshaling and unmarshaling by hand or by concatenating or parsing strings. With properly structured and annotated POJOs, JAXB can handle things for you. You might even be able to cheat and use xjc 与您的 WSDL 文件一起使用 -wsdl 选项创建带注释的 类(虽然是实验性的)。
  • SAAJ。说白了,SAAJ 就像一个特定的 SOAP 消息的构建器和解析器。它将为您处理结构和名称空间。说到这...

...您显示的示例并不是真正有效的 SOAP 消息。 SOAP 是一种协议。您需要正确格式化它并使用正确的命名空间,否则您只是返回一些看起来像 SOAP 但实际上不是的 XML 消息。