我无法使用Java(使用Bonita Open Solution BPM)解析SOAP响应。我有以下SOAP响应(在IBM Content
Manager中搜索文档; SOAP响应返回1个匹配的文档)
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:RunQueryReply xmlns="http://www.ibm.com/xmlns/db2/cm/beans/1.0/schema" xmlns:ns1="http://www.ibm.com/xmlns/db2/cm/beans/1.0/schema">
<ns1:RequestStatus success="true"></ns1:RequestStatus>
<ns1:ResultSet count="1">
<ns1:Item URI="http://xxxx/CMBSpecificWebService/CMBGetPIDUrl?pid=96 3 ICM8 ICMNLSDB16 ICCSPArchivSuche59 26 A1001001A12D18B30015E9357518 A12D18B30015E935751 14 1087&server=ICMNLSDB&dsType=ICM">
<ns1:ItemXML>
<ICCSPArchivSuche ICCCreatedBy="EBUSINESS\iccadmin" ICCCreatedDate="2012-04-18T10:51:26.000000" ICCFileName="Golem_Artikel.txt" ICCFolderPath="" ICCLastModifiedDate="2012-04-18T10:51:28.000000" ICCLibrary="Dokumente" ICCModifiedBy="EBUSINESS\iccadmin" ICCSharePointGUID="c43f9c93-a228-43f9-8232-06bdea4695d1" ICCSharePointVersion="1.0 " ICCSite="Archiv Suche" cm:PID="96 3 ICM8 ICMNLSDB16 ICCSPArchivSuche59 26 A1001001A12D18B30015E9357518 A12D18B30015E935751 14 1087" xmlns:cm="http://www.ibm.com/xmlns/db2/cm/api/1.0/schema">
<cm:properties type="document">
<cm:lastChangeUserid value="ICCCMADMIN"/>
<cm:lastChangeTime value="2012-04-18T11:00:15.914"/>
<cm:createUserid value="ICCCMADMIN"/>
<cm:createTime value="2012-04-18T11:00:15.914"/>
<cm:semanticType value="1"/>
<cm:ACL name="DocRouteACL"/>
<cm:lastOperation name="RETRIEVE" value="SUCCESS"/>
</cm:properties>
<cm:resourceObject CCSID="0" MIMEType="text/plain" RMName="rmdb" SMSCollName="CBR.CLLCT001" externalObjectName=" " originalFileName="" resourceFlag="2" resourceName=" " size="702" textSearchable="true" xsi:type="cm:TextObjectType">
<cm:URL value="http://cmwin01.ebusiness.local:9080/icmrm/ICMResourceManager/A1001001A12D18B30015E93575.txt?order=retrieve&item-id=A1001001A12D18B30015E93575&version=1&collection=CBR.CLLCT001&libname=icmnlsdb&update-date=2012-04-18+11%3A00%3A15.001593&token=A4E6.IcQyRE6_QbBPESDGxK2;&content-length=0"/>
</cm:resourceObject>
</ICCSPArchivSuche>
</ns1:ItemXML>
</ns1:Item>
</ns1:ResultSet>
</ns1:RunQueryReply>
</soapenv:Body>
</soapenv:Envelope>
我想获取文件名( ICCFileName =“ Golem_Artikel.txt” )和此html" target="_blank">文件的网址(< cm:URL value =“
http://cmwin01.ebusiness.local:9080 / icmrm / ICMResourceManager / A10
…
)中使用Java编写的字符串变量。我阅读了几篇有关如何执行此操作的文章(无法处理SOAP响应,如何进行SOAP响应的解析,但没有成功,这是我尝试的方法:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
// Clean response xml document
responseDocumentBody.normalizeDocument();
// Get result node
NodeList resultList = responseDocumentBody.getElementsByTagName("ICCSPArchivSuche");
Element resultElement = (Element) resultList.item(0);
String XMLData = resultElement.getTextContent();
// Check for empty result
if ("Data Not Found".equalsIgnoreCase(XMLData))
return null;
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource inputSource = new InputSource();
inputSource.setCharacterStream(new StringReader(XMLData));
Document doc = documentBuilder.parse(inputSource);
Node node = doc.getDocumentElement();
String result = doc.getNodeType();
return result;
从Bonita,我仅获得responseDocumentBody或responseDocumentEnvelope(org.w3c.dom.Document)作为Web服务响应。因此,我需要从SOAP正文导航到我的变量。如果有人可以帮助我,我会很高兴。
最好的祝福
如果您为此做了大量工作,那么我绝对会建议按照MGoron的建议使用JAXB。如果这只是一杆大事,那么XPATH也可以很好地工作。
/*
* Must use a namespace aware factory
*/
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document doc = dbf.newDocumentBuilder().parse(...);
/*
* Create an XPath object
*/
XPath p = XPathFactory.newInstance().newXPath();
/*
* Must use a namespace context
*/
p.setNamespaceContext(new NamespaceContext() {
public Iterator getPrefixes(String namespaceURI) {
return null;
}
public String getPrefix(String namespaceURI) {
return null;
}
public String getNamespaceURI(String prefix) {
if (prefix.equals("ns1"))
return "http://www.ibm.com/xmlns/db2/cm/beans/1.0/schema";
if (prefix.equals("cm"))
return "http://www.ibm.com/xmlns/db2/cm/api/1.0/schema";
return null;
}
});
/*
* Find the ICCSFileName attribute
*/
Node iccsFileName = (Node) p.evaluate("//ns1:ICCSPArchivSuche/@ICCFileName", doc, XPathConstants.NODE);
System.out.println(iccsFileName.getNodeValue());
/*
* Find the URL
*/
Node url = (Node) p.evaluate("//ns1:ICCSPArchivSuche/cm:resourceObject/cm:URL/@value", doc, XPathConstants.NODE);
System.out.println(url.getNodeValue());
问题内容: 我只想知道,是否有任何简单的方法可以解析MTOM / XOP SOAP响应。问题是我使用纯HTTP发送肥皂消息和javax.xml来解析响应。但是某些服务以mulipart / related回应了我,它需要更复杂的逻辑来解析它(性能很重要)。因此,我想知道我是否可以以某种方式利用apache cxf,apache公理或任何其他库来解析MTOM / XOP SOAP响应? 问题答案:
我在将XML SOAP返回转换为相应的POJO类时遇到问题。XML返回如下所示: 我尝试使用Jackson XMLMAPER,但是在反序列化过程中,我不能把它作为根元素考虑返回节点。它将“信封”节点视为根节点。 我需要只提取返回节点并转换到我的pojo类。 另一个问题是“项目”节点应该是集合的一部分,但是没有对这些元素进行分组的父节点。 有没有人知道一个解析器可以对这种类型的xml进行反序列化?
问题内容: 我使用ksoap2 lib从android客户端与SOAP Web服务进行通信。ksoap团队做的很棒,但是问题是,没有一个很好的例子说明如何在不同方面正确使用它。例如我得到以下数据的肥皂响应: 它是一个复杂的对象,或者是StatusSetting对象的集合。当我尝试获取SoapObject的属性时,只有1个属性,其中所有数据均为字符串。它也不能解析为json。令人难以置信的是,没
我试图使用jaxb解组一个soap响应。 我尝试使用以下代码查找根元素 这是我的样本回复 我能够获取对象,但当我尝试访问中的时,由于前缀 有人能帮我脱身吗? 更新:有人能帮我吗? 我使用stax xml解析器解析为,但我将其中的所有值都视为null。
我是一个全新的在做这3步,所以你能不能请帮助我一步一步。(我懂Java语言,到处写过几个脚本,但从来没有接触过SOAP的东西)。我需要这样做: 1)从两个SOAP服务请求并将响应存储在两个对象中。 4)在控制台中报告差异(而不是在JUnit中作为错误)。 谢谢!
问题内容: 我使用以下函数通过jQuery AJAX发布表单: 它发布正常,但我无法解析响应,它记录到控制台,如下所示 我相信这是我正在寻找的回应。 但是,当我尝试执行响应对象的任何其他成员时,它就是。 任何建议表示赞赏。 问题答案: 呼唤 应该可以访问所需的数据。 现在应该显示“ 1”