Java - Acceder a web services remota

 
Vista:

Acceder a web services remota

Publicado por Nacho (3 intervenciones) el 15/07/2009 09:44:23
Hola a todos:

Es la primera vez que escribo en este foro, estoy realizando unas web services para un proyecto, mi problema viene al realizar el acceso a la web service remota desde cliente, he creado el cliente a partir del WSDL y he probado el acceso mediante la herramienta de eclipse Test with webservice explorer, donde el acceso me lo hace de forma correcta.

Mi problema viene a la hora de acceder desde una clase java prueba creada por mi mismo, me da el siguiente error:

Exception in thread "main" AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.lang.NullPointerException
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname:Minimole

java.lang.NullPointerException
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1772)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2923)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at net.emovilia.demos.visitasGenWS.VisitasSOAPStub.executeDatosEncargo(VisitasSOAPStub.java:332)
at net.emovilia.demos.visitasGenWS.VisitasProxy.executeDatosEncargo(VisitasProxy.java:56)
at net.emovilia.demos.visitasGenWS.Prueba.main(Prueba.java:154)

Al realizar el acceso a una webservice local, este mismo código lo hace de forma correcta, el problema viene cuando intento entrar en otra máquina.

El código que utilizo es el siguiente:

public class Prueba {
public static void main(String[] args) throws Exception{
ProcEncargoReq encargoReq;
encargoReq= new ProcEncargoReq();
ProcEncargoRes encargoRes;
encargoRes= new ProcEncargoRes();
Encargo encargo;
encargo= new Encargo();
String servicio= "prueba";
String version="12";

encargo.setServicio(servicio);
encargo.setVersion(version);

DatosEncargoType datosEncargo;
datosEncargo= new DatosEncargoType();


String accion= "Prueba";
String actuacionAl= "peritar";
String ciaCliente= "G";
String codActuacion= "12";
String codProfesional= "12";

DatosAseguradoType datosAsegurado;
datosAsegurado= new DatosAseguradoType();

DatosAutosType datosAutos;
datosAutos= new DatosAutosType();

DatosContactoType datosContacto;
datosContacto= new DatosContactoType();

String descActuacion="peritar";
String descLugarActuacion="calle";

FechaPrevistaType fechaPrevista;
fechaPrevista= new FechaPrevistaType();

HoraPrevistaType horaPrevista;
horaPrevista= new HoraPrevistaType();

String idEncargo="1";
String numSiniestro="12";
String observaciones="hola";
String tipoMensaje= "prueba";
String tipoProfesional="perito";
String tipoSubservicio="ayudar";
String urgente="si";
String modeloPlataf="AU";

String dniAseg="80146937";
String nombreAseg="Juan";

String compromiso="si";
String conductorVehicAseg="Pepe";
String matriculaVehicAseg="1234";
String modeloVehicAseg="fiat";
String vehicSustitucion="fiat";

String nombre= "Miguel";
String telefono= "9311111";

String anyPrev="2009";
String diaPrev="4";
String mesPrev="8";

String horaPrev="18";
String minPrev="30";



datosEncargo.setAccion(accion);
datosEncargo.setActuacionAl(actuacionAl);
datosEncargo.setCiaCliente(ciaCliente);
datosEncargo.setCodActuacion(codActuacion);
datosEncargo.setCodProfesional(codProfesional);

datosAsegurado.setDniAseg(dniAseg);
datosAsegurado.setNombreAseg(nombreAseg);

datosEncargo.setDatosAsegurado(datosAsegurado);

datosAutos.setCompromiso(compromiso);
datosAutos.setConductorVehicAseg(conductorVehicAseg);
datosAutos.setMatriculaVehicAseg(matriculaVehicAseg);
datosAutos.setModeloVehicAseg(modeloVehicAseg);
datosAutos.setVehicSustitucion(vehicSustitucion);

datosEncargo.setDatosAutos(datosAutos);

datosContacto.setNombre(nombre);
datosContacto.setTelefono(telefono);

datosEncargo.setDatosContacto(datosContacto);

fechaPrevista.setAnyPrev(anyPrev);
fechaPrevista.setDiaPrev(diaPrev);
fechaPrevista.setMesPrev(mesPrev);

datosEncargo.setFechaPrevista(fechaPrevista);

horaPrevista.setHoraPrev(horaPrev);
horaPrevista.setMinPrev(minPrev);

datosEncargo.setHoraPrevista(horaPrevista);

datosEncargo.setDescActuacion(descActuacion);
datosEncargo.setDescLugarActuacion(descLugarActuacion);
datosEncargo.setIdEncargo(idEncargo);
datosEncargo.setModeloPlataf(modeloPlataf);
datosEncargo.setNumSiniestro(numSiniestro);
datosEncargo.setObservaciones(observaciones);
datosEncargo.setTipoMensaje(tipoMensaje);
datosEncargo.setTipoProfesional(tipoProfesional);
datosEncargo.setTipoSubservicio(tipoSubservicio);
datosEncargo.setUrgente(urgente);



System.out.println("Hemos llegado hasta aquí");


encargoReq.setEncargo(encargo);


String endpointURL="http://demos.emovilia.net:8080/visitasGenWS/services/visitasSOAP";
//Service service= new Service();
//SinMobilInHandlerService service= new SinMobilInHandlerServiceLocator();
System.out.println("Hemos llegado hasta aquí");
//SinMobilInHandler sinMobilInHandler= service.getSinMobilInHandler();

System.out.println("Hemos llegado hasta aquí");

//urgenteRes= sinMobilInHandler.executeAceptarEncargo(urgenteReq);
//System.out.println(urgenteRes.getCodError());
Visitas_Service WSService = new Visitas_ServiceLocator ();
Visitas_PortType WS = WSService.getvisitasSOAP();
//SinMobilInHandlerServiceLocator service= WSServiceLocator.

//urgenteRes= WS.executeAceptarEncargo(urgenteReq);
VisitasProxy WSProxy= new VisitasProxy();
System.out.println("Hemos llegado hasta aquí");
WSProxy.setEndpoint(endpointURL);


encargoRes= WSProxy.executeDatosEncargo(encargoReq);
System.out.println("Hemos llegado hasta aquí");

System.out.println(encargoRes.getCodError());




//call.setTargetEndpointAddress(endpointURL);
//call.setOperationName("executeAceptarEncargo");
//String url= service.getSinMobilInHandlerAddress();
//call.addParameter("urgenteReq", XMLType.ProcEncargoUrgente, javaType, parameterMode)

}



}

El error lo genera al realizar la llamada a executeDatosEncargo.

Si alguien me puede ayudar se lo agradecería muchísimo.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Acceder a web services remota

Publicado por Mario (40 intervenciones) el 16/07/2009 13:54:28
Prueba a pasarle la URL donde se ubica el servicio web en esta línea:

Visitas_Service WSService = new Visitas_ServiceLocator ();

El service locator te suele coger por defecto una url, que suele ser donde creas o publicas los wsdl... Prueba a meter ahi la url donde tienes publicado el servicio realmente , que es la url que obtienes unas lineas antes.

Espero que eso te sirva ; )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Acceder a web services remota

Publicado por Nacho (3 intervenciones) el 17/07/2009 08:39:50
Muchas gracias, lo he probado, y ahora me da un error 401 de autencticacion, puede ser por un problema de contraseña en la maquina remota?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Acceder a web services remota

Publicado por Gorka (17 intervenciones) el 22/07/2009 13:53:48
Hola Nacho

Una pregunta sobre el acceso a Web Services desde un máquina Remota .
Cuando en la máquina local creas la clase en la que se van a utilizar los WebServices , se supone que tiene que haber una referencia al wsdl del web service en el fichero de la clase . ¿ Sabes como se hace la referencia al fichero wsdl en la clase que utiliza los WebServices en Eclipse ?

Saludos y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar