Soy nuevo en el webservice de desarrollo. Estoy usando Netbeans 7.0 con el Axis2 plugin y Tomcat 7.

He creado un proyecto para los componentes del servidor donde puedo definir los métodos web y, a continuación, crea otro proyecto para los componentes de cliente. El cliente fue creado en Netbeans seleccionando Nuevo -> Webservice Cliente.

Cuando se selecciona Nuevo -> Webservice Cliente en Netbeans, se le pide que haga, a continuación, para una URL de WSDL. Así que por supuesto me dio la dirección URL de WSDL a partir de mi local de instalación de Tomcat. Pero ¿qué pasa cuando me distribuir esta como una aplicación real? Los usuarios no van a punto de sus clientes en http://localhost:8080/axis2/services/?wsdl. Quiero decir, cuando se ejecuta en el cliente desde el IDE, funciona todo bien, pero cuando voy a distribuir este (es un trabajo de aplicación de la gestión por la manera en que usted se clock in /out en uno o más clientes y tarjetas de tiempo se escriben en una central DB), cada cliente debe ser capaz de apuntar a la URL del webservice de cualquier servidor de producción se supone que debe conectarse.

Me gustaría guardar la URL del webservice en un archivo de propiedades, pero realmente no sé lo que todos lo hacen mediante programación en el cliente para hacer la llamada a la URL que se carga desde el archivo de propiedades.

En mi cliente de la carpeta dist, si abro el FRASCO que netbeans creados con WinZip, veo un nombre de archivo jax-ws-catalog.xml que tiene la URL en la que está apuntando a localhost). Supongo que esto es donde la dirección URL que se utiliza en tiempo de ejecución viene.

Así que ¿cuál es la manera correcta de ir sobre esto? He buscado en todo, pero las cosas que he encontrado buscando en google las búsquedas tienden a mostrar webservice las llamadas que se hagan en una forma completamente diferente de lo que el código generado automáticamente que Netbeans pone juntos, y me gustaría algo de información específica a cómo Netbeans crea un webservice cliente para que no me terminan de hacer los cambios sólo para tener el IDE sobrescribir ellos.

Gracias! Lo siento por la larga explicación.

-Jim

OriginalEl autor Jim | 2012-03-06

3 Comentarios

  1. 2

    Esto ha sido contestado antes:
    Cómo cambiar la url del webservice extremo?

    NetBeans utiliza llanura JAX-WS para generar el código de cliente, por lo que la respuesta anterior debe trabajar para usted. Sólo se necesita añadir algo de código para obtener la dirección URL del extremo de un archivo de propiedades.

    Así que, en mi aplicación cliente cuando agrego un método web (es decir, en la Web del Servicio de Referencias nodo, seleccione la httpSOAP12endpoint y a todos mis métodos web que se enumeran; yo seleccione una opción y arrastre al cliente archivo de origen), me sale algo como la siguiente… private static String testConnection() { simplylaborclient.SimplyLaborServer servicio = new simplylaborclient.SimplyLaborServer(); simplylaborclient.SimplyLaborServerPortType port = servicio.getSimplyLaborServerHttpSoap12Endpoint(); return puerto.testConnection(); }
    Lo siento mi comentario se cortó. Así, un simple testConnection método tiene este aspecto en el lado del cliente… private static String testConnection() { simplylaborclient.SimplyLaborServer servicio = new simplylaborclient.SimplyLaborServer(); simplylaborclient.SimplyLaborServerPortType port = servicio.getSimplyLaborServerHttpSoap12Endpoint(); return puerto.testConnection(); }
    Y esto funciona bien cuando se ejecuta con mi servidor local. Así que crear un BindingProvider y la puso a la altura de mi objeto de puerto, a continuación, hacer algo como esto con enpointUrl cargado desde un archivo de propiedades? – bp.getRequestContext().poner(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL); ¿me ejecución de bp.testConnection() por ejemplo?
    Dios es una mierda que no llega a responder muy bien con los comentarios; sin saltos de línea, por lo que no puede mostrar el código de ejemplo sin responder a mi propia pregunta. Supongo que debería de haber editado mi pregunta original en lugar de usar los comentarios. Lo siento chicos, soy nuevo en esto.
    Está bien, soy nuevo en esto también. Esta es mi primera respuesta. En su 3er comentario es correcto, usted necesita para lanzar su «puerto» objeto a BindingProvider usando: BindingProvider bp = (BindingProvider)puerto;, a continuación, cambie la dirección URL mediante bp.getRequestContext().poner(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL); y reemplazar «endpointURL» con la Cadena que se cargan desde el archivo de propiedades.

    OriginalEl autor shott85

  2. 4

    De hecho, me di cuenta de esto de una manera diferente, y es probablemente el tipo de específico de la forma en Netbeans hace las cosas. La respuesta Shott85 siempre es buena también, pero creo que esto es más específico de la forma en Netbeans’ auto-genera código.

    Así que tengo un proyecto donde todos los métodos web residen nombre SimplyLaborServer, y un proyecto que tiene el webservice cliente llamado SimplyLaborClient.

    En Netbeans, bajo el SimplyLaborClient proyecto en el «Generado Fuentes (jax-ws)» nodo, tienen un SimplyLaborServer.java archivo que tiene una clase que extiende de Servicio. Tiene una dirección privada, que está codificado en mi servidor local de la dirección URL de la siguiente manera…

    url = new URL("http://localhost:8080/axis2/services/SimplyLaborServer?wsdl");

    Y en el constructor por defecto, utiliza esta dirección. Pero también proporciona un constructor de la siguiente manera donde puedo especificar la URL…

    public SimplyLaborServer(URL wsdlLocation) {
        super(wsdlLocation, SIMPLYLABORSERVER_QNAME);
    }

    Así que cuando tengo un auto-generado método que se parece a esto en mi cliente…

    private static String testConnection() {
        simplylaborclient.SimplyLaborServer service = new simplylaborclient.SimplyLaborServer();
        simplylaborclient.SimplyLaborServerPortType port = service.getSimplyLaborServerHttpSoap12Endpoint();
        return port.testConnection();
    }

    Me puede simplemente cargar un objeto de Propiedades que tiene la dirección URL del extremo y cambiar de una línea a algo como la siguiente, donde el atrezzo es un objeto de Propiedades que tiene endpointUrl definido con la dirección URL correcta.

    simplylaborclient.SimplyLaborServer service = new simplylaborclient.SimplyLaborServer(new URL(props.getProperty("endpointUrl")));

    Mi única preocupación es que estos métodos son una especie de auto-generado al arrastrar y soltarlos de la «Web del servicio de referencias» de este nodo. No quiero que se sobrescriban si puedo hacer cambios adicionales en el lado del servidor.

    Así que todavía estoy abierto a comentarios si esto es lo correcto a hacer aquí o no.

    Gracias

    Me quedo con esta respuesta a los demás; hay un menor impacto sobre el código! Para responder a tu último comentario, he puesto todo esto en mi WebService capa de implementación, por lo que incluso si yo reconstruir el Cliente de Servicio Web en sí, ese trozo de código no serán afectados. (Esta aplicación se encuentra realmente en una completamente diferente del proyecto.)
    «Cuando se selecciona Nuevo -> Webservice Cliente en Netbeans, se le pide que haga, a continuación, para una URL de WSDL. Así que por supuesto me dio la dirección URL de WSDL a partir de mi local de instalación de Tomcat.» -> Si usted quiere que su cliente generado para que apunte a la URL correcta, entonces el punto a la URL correcta en el momento de generar el cliente; la dirección URL debe ser accesible a la hora de generar el cliente, aunque. – Con eso dicho, estoy de acuerdo con @JFTxJ: el uso de una implementación diferente de la capa/de la clase para crear una instancia del objeto cliente.

    OriginalEl autor Jim

  3. 1

    Usted está usando locales (http://localhost:8080/axis2/services) WSDL para la creación de las clases requeridas del servicio web.

    Después de que su evolución completa puede host de la aplicación de servicio web en cualquier lugar en la web o en la red local.

    Después de completar los desarrollos de web service puede localmente implementar y utilizar el servicio para crear los clientes exigen clases. Al crear el cliente sólo tiene que crear un objeto URL y pasar su dirección URL del servicio web (hosted) tal como a continuación.

    PropertyResourceBundle resoureceBundle = (PropertyResourceBundle) PropertyResourceBundle.getBundle(‘Property file name and path’);
    URL serviceURL = resoureceBundle. getString("Hosted_URL_Name");
    ServiceClass service = new ServiceClass(serviceURL);
    ServicePort servicePort = new ServicePort(service);
    servicePort.getItems();

    Netbeans IDE va a crear muchas clases cuando se creó la red de servicio de cliente de forma automática.

    En el código de ejemplo anterior ServiceClass es el servicio web de la clase principal que es crear inicialmente mediante el uso de la URL local. El nombre y los parámetros del constructor será varían en cuanto a su servicio web, pero tienes que pasar la dirección URL del servicio web (recién alojado URL) como una cadena.

    A continuación, con la clase de servicio puede crear un objeto de puerto y el acceso a todos los métodos web que usted necesita.

    OriginalEl autor Supun

Dejar respuesta

Please enter your comment!
Please enter your name here