DOM Document null? - PullRequest
       3

DOM Document null?

1 голос
/ 01 ноября 2011

При попытке разобрать тип возвращаемого метода, имя метода и параметры из следующего WSDL (XML-документ), я получаю нулевое значение каждый раз, когда пытаюсь получить что-то из документа DOM:

<?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 () возвращает ноль. Я также получаю нулевые значения при попытке получить другие вещи, такие как корневой узел и т. Д. Что я здесь не так делаю?

1 Ответ

2 голосов
/ 01 ноября 2011

Кажется, что firstChild узла является допустимым объектом (не равным нулю), в противном случае вы получите исключение нулевого указателя при вызове firstChild.getNodeValue ().

Если вы хотите получить доступ к имени узла, используйте «doc.getNodeName ()» вместо «doc.getNodeValue ()». Последний дает вам содержимое тега (без содержимого дочерних тегов), которое указано между открывающим и закрывающим тегом, но не тег или какие-либо атрибуты. Более того, поскольку корневой тег «wsdl: definition» (в файле примера) определяет дочерние теги, для него не может быть одновременно никакого текстового содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...