问题描述
我有以下接受 xml
的方法,并且我对内容进行了一些数据馈送。
我也应该返回一条 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 消息/响应,感觉就像来自 REST 的地狱。我可能需要创建某种层次结构来正确填充值,但我不确定如何在没有任何框架的情况下使用 Java
来完成。
解决方法
您提到使用框架不是一种选择,但您的平台可能会提供更轻量级的东西:
-
JAXB。 JAXB 允许您使用注释将 Java 类映射到 XML 表示。它比手动或通过连接或解析字符串进行编组和解组要好得多。有了正确结构化和注释的 POJO,JAXB 可以为您处理事情。您甚至可以欺骗并在 WSDL 文件中使用 xjc 来创建带有
-wsdl
选项的带注释的类(不过是实验性的)。 - SAAJ。坦率地说,SAAJ 就像 SOAP 消息的特定构建器和解析器。它将为您处理结构和命名空间。说起来……
...您所展示的示例并不是真正有效的 SOAP 消息。 SOAP 是一种协议。您需要对其进行正确格式化并使用正确的名称空间,否则您只会返回一些看起来像 SOAP 但实际上不是的 XML 消息。