【发布时间】:2011-11-01 00:15:07
【问题描述】:
在尝试从以下 WSDL(xml 文档)解析方法返回类型、方法名称和参数时,每次尝试从 DOM 文档中检索某些内容时都会得到 null:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://math" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://math" xmlns:intf="http://math" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://math" xmlns="http://www.w3.org/2001/XMLSchema">
<element name="addTwoInts">
<complexType>
<sequence>
<element name="int1" type="xsd:int"/>
<element name="int2" type="xsd:int"/>
</sequence>
</complexType>
</element>
<element name="addTwoIntsResponse">
<complexType>
<sequence>
<element name="addTwoIntsReturn" type="xsd:int"/>
</sequence>
</complexType>
</element>
<element name="multiplyTwoFloats">
<complexType>
<sequence>
<element name="float1" type="xsd:float"/>
<element name="float2" type="xsd:float"/>
</sequence>
</complexType>
</element>
<element name="multiplyTwoFloatsResponse">
<complexType>
<sequence>
<element name="multiplyTwoFloatsReturn" type="xsd:float"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<wsdl:message name="addTwoIntsResponse">
<wsdl:part element="impl:addTwoIntsResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="addTwoIntsRequest">
<wsdl:part element="impl:addTwoInts" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="multiplyTwoFloatsRequest">
<wsdl:part element="impl:multiplyTwoFloats" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="multiplyTwoFloatsResponse">
<wsdl:part element="impl:multiplyTwoFloatsResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="MathServices">
<wsdl:operation name="addTwoInts">
<wsdl:input message="impl:addTwoIntsRequest" name="addTwoIntsRequest">
</wsdl:input>
<wsdl:output message="impl:addTwoIntsResponse" name="addTwoIntsResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="multiplyTwoFloats">
<wsdl:input message="impl:multiplyTwoFloatsRequest" name="multiplyTwoFloatsRequest">
</wsdl:input>
<wsdl:output message="impl:multiplyTwoFloatsResponse" name="multiplyTwoFloatsResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="MathServicesSoapBinding" type="impl:MathServices">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="addTwoInts">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="addTwoIntsRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="addTwoIntsResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="multiplyTwoFloats">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="multiplyTwoFloatsRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="multiplyTwoFloatsResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MathServicesService">
<wsdl:port binding="impl:MathServicesSoapBinding" name="MathServices">
<wsdlsoap:address location="http://localhost:8080/WSDLServer"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
这是我尝试以编程方式执行的操作:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
//parse using builder to get DOM representation of the XML file
Document doc = db.parse("MathServices.xml");
Node firstChild = doc.getFirstChild();
System.out.println(firstChild.getNodeValue());
}catch(ParserConfigurationException pce) {
pce.printStackTrace();
}catch(SAXException se) {
se.printStackTrace();
}catch(IOException ioe) {
ioe.printStackTrace();
}
正如我所提到的,firstNode.getNodeValue() 返回 null。尝试获取其他内容(例如根节点等)时,我也会得到空值。我在这里做错了什么?
【问题讨论】:
标签: java xml dom wsdl document