Consumiendo un web service algo raro pasa con la version de java

Buenos dias,,,
les quiero mostrar mi clase para consumir un web service pero sucede algo curioso (al menos para mi), si lo ejecuto con java 5 jala perfectamente, si le meto java 6 tengo que cambiar una linea para que funcione,,, alguien sabe a que se debe ??

primeramente pruebo que el web service a consumir jale perfectamente,, y lo hago con SOAP,, y tambien uso este para unos datos que necesito

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ser="El namespace que aparece aqui lo ocupare en el codigo">
   <soap:Header/>
   <soap:Body>
      <ser:obtenerSegmentacion>//el nombe de este nodo tambien..
         <!--Optional:-->
         <ser:pais>?</ser:pais>
         <!--Optional:-->
         <ser:canal>?</ser:canal>
         <!--Optional:-->
         <ser:sucursal>?</ser:sucursal>
         <!--Optional:-->
         <ser:folio>?</ser:folio>
         
         
      </ser:obtenerSegmentacion>
   </soap:Body>
</soap:Envelope>

Luego la clase java

package ws.servicios.segmentacion;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Map;

import javax.xml.soap.MessageFactory;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
 
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class Servicio {

        public NodeList obtenerSegmentacion(Map<String, String> map,String ruta ) {
                String urlWS = null;
                NodeList nodosRespuesta= null;
                SOAPEnvelope envelope = null;
                String nameSpace = null;

                try {
                        // Se crea el mensaje de entrada esta linea es la que funciona en 5
                        //para correrlo en 5 tuve que sustituirla por la que se encuentra comentada abajo
                        //MessageFactory messageFactory = new org.apache.axis.soap.MessageFactoryImpl();
                        MessageFactory messageFactory = MessageFactory.newInstance();
                        SOAPMessage mensaje = messageFactory.createMessage();
                        envelope = mensaje.getSOAPPart().getEnvelope();
                        nameSpace = "El namespace que aparece arriba ";
                        //El ser es el prefijo que viene en el soap
                        envelope.addNamespaceDeclaration("ser", nameSpace);

                        // Se definen los elementos que componen el xml
                        Name obtenerInfo = envelope.createName("obtenerSegmentacion",//este nombre es el del nodo del soap
                                        "ser", nameSpace);

                        Name pais = envelope.createName("pais", "ser", nameSpace);
                        Name canal = envelope.createName("canal", "ser", nameSpace);
                        Name sucursal = envelope.createName("sucursal", "ser", nameSpace);
                        Name folio = envelope.createName("folio", "ser", nameSpace);
                         

                         
                        SOAPBody body = envelope.getBody();
                        SOAPBodyElement obtenerInfoElement = body
                                        .addBodyElement(obtenerInfo);

                                        //SE le agregan los parametros que reciobe el web service
                  obtenerInfoElement.addChildElement(canal).addTextNode(map.get("canal"));
                          obtenerInfoElement.addChildElement(sucursal).addTextNode(map.get("sucursal"));
                         obtenerInfoElement.addChildElement(folio).addTextNode(map.get("folio"));
                         
                 

                         
                        /* System.out.println(ver lo que mandaremos); */
                        mensaje.writeTo(System.out);

                        urlWS = ruta;

                        // Realizando la llamada al WebService, enviando mensaje de entrada
                        // y recibiendo respuesta.
                        URL url = new URL(urlWS);
                        SOAPMessage mensajeRespuesta = null;
                        Service service = new Service();
                        Call call = (Call) service.createCall();
                        call.setTargetEndpointAddress(url);
                        call.setUseSOAPAction(true);

                        InputStream input = new ByteArrayInputStream(envelope.toString()
                                        .getBytes());

                        org.apache.axis.message.SOAPEnvelope envTmp = new org.apache.axis.message.SOAPEnvelope(
                                        input);

                        call.setTimeout(4000);
                        call.invoke(envTmp);
                        mensajeRespuesta = call.getResponseMessage();

                        /* System.out.println("mensajeRespuesta make"); */
                        // mensajeRespuesta.writeTo(System.out);

                        // Extraer cadena de salida del mensaje de salida.
                        Document doc = mensajeRespuesta.getSOAPBody().getOwnerDocument();
                         

                         nodosRespuesta = doc.getElementsByTagName("return");

                       

                } catch (Exception e) {
                        e.printStackTrace();
                }
                return nodosRespuesta;

        }

}

y finalmente el main que lo ejecuta

public class JavaApplication {

    /**
     * @param args the command line arguments
     */

    public static void main(String[] args) {
     System.out.println("Vamos Al web service");
                Servicio serv = new Servicio();
                Map<String, String> mapa =  new HashMap<String, String>();
                mapa.put("pais", "1");
                mapa.put("canal", "1");
                mapa.put("sucursal","100");
                mapa.put("folio", "100");
                 
                String url="Ruta del web service a consultar";
                NodeList nodos=         serv.obtenerSegmentacion(mapa,  url);
                        System.out.println(nodos.item(0).getChildNodes().item(13)
                                        .getChildNodes().item(0).getFirstChild());
    }
}

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

nodos

con esta parte leo los nodos,, el primer nodo del nodo 13 poe ejemplo

nodos.item(0).getChildNodes().item(13)
                                        .getChildNodes().item(0).getFirstChild()
Imagen de ezamudio

qué linea

Y cuál es la línea que tienes que cambiar?

esta

//java 5
    MessageFactory messageFactory = MessageFactory.newInstance();
//java 6
MessageFactory messageFactory = new org.apache.axis.soap.MessageFactoryImpl();
Imagen de ezamudio

axis2

Pero estás usando Axis2 en ambos casos, cierto? No debería haber ninguna diferencia, a menos que haya otro MessageFactory en tus imports en Java 6. El error que tienes es de compilación o en tiempo de ejecución?

axis 1

Axis 2,, no es el 1

axis.jar
saaj.jar

el error se da en tiempo de ejecucion en la siguiente linea

org.apache.axis.message.SOAPEnvelope envTmp = new org.apache.axis.message.SOAPEnvelope(
                                        input);

y solo manda un

SAXParseException: Document root element is missing

pero solo cambiando esa linea funciona
jejeje