servicio services paso from example ejemplo crear consumir consume como java web-services netbeans client jax-ws

java - services - Cliente JAX-WS sin un archivo de documento WSDL



wsimport ejemplo (4)

Estoy consumiendo un servicio web soa, con netbeans (jax-ws) uso netbeans auto generate client, y todo funciona bien, pero veo que el wsdl siempre se descarga mientras el cliente se está ejecutando.

En producción no quiero exponer el wsdl, y estoy tratando de modificar el cliente para que no requiera wsdl, todas mis intenciones son incorrectas, me parece esto:

WebService_Service svc = new WebService_Service( null, new QName("http://www.example.com/ws", "WebService")); WebService port = svc.getPort(WebService.class); BindingProvider bindingProvider = (BindingProvider) port; bindingProvider.getRequestContext() .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://www.example.com/real_endpoint_url_goes_here");

pero cuando se ejecuta la primera línea encontré esta excepción:

Message: El contenido no está permitido en el prólogo. at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.wrapException(Unknown Source) at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.next(Unknown Source) at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextContent(Unknown Source) at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextElementContent(Unknown Source) at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.hasWSDLDefinitions(Unknown Source) at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(Unknown Source) at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(Unknown Source) at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(Unknown Source) at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source) at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source) at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(Unknown Source) at javax.xml.ws.Service.<init>(Unknown Source)

Alguna idea de ignorar wsdl?


Esta excepción ocurre mientras hay un error de análisis en su xml y hay algo mal en la fila y columna especificada. Verifica tu xml


Finalmente uso las bibliotecas CXF y logro usar la respuesta de Paul Vargas:

Sin un archivo de documento WSDL

Esta solución requiere que el cliente se genere.

QName qname = new QName("http://thenamespace", "FooService"); FooService service = new FooService(null, qname); // null for ignore WSDL Foo port = service.getFooPort(); BindingProvider bindingProvider = (BindingProvider) port; bindingProvider.getRequestContext() .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://foo.com/soap/fooBean"); // Use the service String result = port.doSomething(param);

Usando jaw-w estándar, esta solución no funciona, CXF es necesario.


Necesitaba algo como esto, también.

En mi caso, puse un wsdl ficticio sin dirección de punto final dentro de mi ruta de clase de la aplicación web. Después de eso, establecí una dirección válida en tiempo de ejecución, como esta:

String WSDL = "/config/ws/Main_default.wsdl"; Main service = new Main(Main.class.getResource(WSDL), new QName( "http://www.example.com/", "Main")); MainWS port = service.getMainWSPort(); BindingProvider bindingProvider = (BindingProvider) port; bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://app.example.com/ws/services/main"); Object result = port.someMethod("some param");


Hay varias formas, de las cuales les diré dos:

  1. Use un archivo de documento WSDL localmente

    Guarde una copia del archivo de documento WSDL y los archivos schemma en su proyecto.

    ClassLoader classloader = Thread.currentThread().getContextClassLoader(); URL wsdlLocation = classloader.getResource("MyHelloService.wsdl"); QName serviceName= new QName("http://test.com/", "MyHelloService"); MyHelloService service = new MyHelloService(wsdlLocation, serviceName); service.sayHello("Test");

    Puede combinar el archivo de documento WSDL con los archivos de esquema.

  2. Sin un archivo de documento WSDL

    Esta solución requiere que el cliente se genere.

    QName qname = new QName("http://thenamespace", "FooService"); FooService service = new FooService(null, qname); // null for ignore WSDL Foo port = service.getFooPort(); BindingProvider bindingProvider = (BindingProvider) port; bindingProvider.getRequestContext() .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://foo.com/soap/fooBean"); // Use the service String result = port.doSomething(param);