我有一个XML文档作为字符串,它是没有SOAP信封的SOAP请求。我现在需要做以下事情:
实际的HTTP连接的东西很好,但我真的很挣扎包装和解包。我试图弄清楚如何在Java中进行这种XML操作,但无法弄清楚。以javax.xml
pacakge为例,但发现它只是一个巨大的混乱。不幸的是我只限于Java 1.5而没有外部库,否则我可能会使用一些apache commons东西。
基本上我正在寻找的是一对像这样的方法:
/* Wraps the xml in a standard soap envelope */
String wrap(String xml)
/* Removes soap envelope from the xml */
String unwrap(String xml)
我认为wrap
方法可能就像soapStart + xml + soapEnd
一样简单,尽管如果不小心,xml标题可能会搞砸。但是对于我来说,展开过于棘手,因为你需要实际提取<soapenv:Body>
和中的内容,确保你得到所需的名称空间声明等等。
我一直坐在这里几个小时,我仍然不知道......希望你们中的一些人这样做:)
答案 0 :(得分:1)
您可以尝试使用正则表达式。 要查找信封内容:
String regex = "^<(soapenv:Envelope).*?>(.*?)</\\1>$";
Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(xml);
matcher.matches();
String body = matcher.group(2);
像这样的东西
答案 1 :(得分:0)
消息的SOAP部分包含一个包含正文(可以包含数据或错误信息)和可选标头的信封。当您使用JAXM创建SOAP消息时,将为您创建SOAP部件,信封和正文:您只需创建正文元素。要做到这一点,你需要到body元素的父元素,即SOAP体。
为了到达SOAPMessage树中的任何对象,您必须从根开始遍历树,如以下代码行所示。例如,假设SOAPMessage是MyMsg,这里是为了获取SOAP主体而必须进行的调用:
SOAPPart MyPart = MyMsg.getSOAPPart();
SOAPEnvelope MyEnv = MyPart.getEnvelope();
SOAPBody MyBody = envelope.getBody();
此时,您可以为body元素创建一个名称(如Namespaces中所述),并将body元素添加到SOAPMessage中。
例如,以下代码行为body元素创建一个名称(XML标记的表示):
Name bodyName = envelope.createName("Temperature");
下一个代码行将body元素添加到正文:
SOAPBodyElement myTemp = MyBody.addBodyElement(bodyName);
最后,此代码行定义了body元素bodyName的一些数据:
myTemp.addTextNode("98.6");