Uploaded image for project: 'Axis'
  1. Axis
  2. AXIS-1537

getPreviousSibling results in NullPointerException on Envelopes

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Cannot Reproduce
    • beta-3
    • None
    • SAAJ
    • None
    • Windows 2000, JDK 1.3

    Description

      I am attempting to run an XSLT directly against a result SOAPEnvelope and have hit a couple of issues.

      One issue is that SOAPEnvelope.getPreviousSibling() will result in a NullPointerException. Below is a code snippet:

      /*

      • Copyright 2001-2004 The Apache Software Foundation.
        *
      • Licensed under the Apache License, Version 2.0 (the "License");
      • you may not use this file except in compliance with the License.
      • You may obtain a copy of the License at
        *
      • http://www.apache.org/licenses/LICENSE-2.0
        *
      • Unless required by applicable law or agreed to in writing, software
      • distributed under the License is distributed on an "AS IS" BASIS,
      • WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      • See the License for the specific language governing permissions and
      • limitations under the License.
        */
        import org.apache.axis.client.Call;
        import org.apache.axis.client.Service;

      import javax.xml.namespace.QName;

      public class Test
      {
      public static void main(String [] args) {
      try {
      String endpoint =
      "http://webservices.sonicsw.com:8080/axis/CreditCheck.jws";

      Service service = new Service();
      Call call = (Call) service.createCall();

      call.setTargetEndpointAddress( new java.net.URL(endpoint) );
      call.setOperationName(new QName("http://webservices.sonicsw.com:8080/axis/CreditCheck.jws", "checkCredit") );

      // Call to addParameter/setReturnType as described in user-guide.html
      call.addParameter("custid",
      org.apache.axis.Constants.XSD_STRING,
      javax.xml.rpc.ParameterMode.IN);
      call.addParameter("amount",
      org.apache.axis.Constants.XSD_FLOAT,
      javax.xml.rpc.ParameterMode.IN);
      call.setReturnType(org.apache.axis.Constants.XSD_BOOLEAN);

      Boolean ret = (Boolean) call.invoke( new Object[]

      { "1234", new Float( 1.24 ) }

      );
      org.w3c.dom.Node n = call.getResponseMessage().getSOAPEnvelope();
      n.getPreviousSibling();
      /* Node parentNode = n.getParentNode();
      if( parentNode == null )
      System.err.println( "PARENT NODE IS NULL!" );*/

      // String test = com.sonicsw.xqimpl.script.Util.getElementAsString( (org.w3c.dom.Element)n, true );
      String test = org.apache.axis.utils.DOM2Writer.nodeToString( n, true );
      System.out.println("Resulting XML: " + test );

      } catch (Exception e)

      { e.printStackTrace(); System.err.println(e.toString()); }

      }
      }

      n.getPreviousSibling() throws a NullPointerException.

      A workaround is to call getAsDOM() on the Envelope.

      However, performance may make this undesireable. getAsDOM() will cause Axis's object model to be serialized as a string, then a subsequent deserialization will occur to create a native DOM because of performanceit results in a serialization of Axis's DOM structure to a string, then another deserialization occurs to create a DOM in your parser (such as Xerces).

      Attachments

        1. MessageElement.java.patch
          0.6 kB
          Attila Uhljar
        2. MessageElement.java.patch
          0.6 kB
          Attila Uhljar
        3. NodeImpl.java.diff
          1 kB
          Attila Uhljar

        Issue Links

          Activity

            People

              venkat Venkat Reddy
              mtheroux Michael Theroux
              Votes:
              1 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: