2011-05-17 15 views
7

Estoy usando las herramientas de generación de servicios web de NetBeans. He visto los tutoriales disponibles, pero no encuentro nada sobre cómo usar una clase personalizada como tipo de devolución. La mayoría de los tutoriales que he leído no son más complejos que Hello World: toman y devuelven tipos simples como Strings.¿Utiliza una clase personalizada como tipo de devolución JAX-WS?

Digamos que quiero una clase que tenga 3 campos: un String, un int y un double []. Hasta ahora, la única forma en que puedo pasar mis propias clases es creando "clases de envolvente", sin métodos, un constructor sin parámetros y con todos los campos declarados públicos. Prefiero escribir clases Java estándar. Obviamente, no puedo enviar los métodos a través de SOAP, pero habría pensado que había una forma de ignorar los métodos cuando Marshalling la clase, y solo Marshall los campos.

Alguien me ha dicho que hay Anotaciones que lo facilitan, pero no encuentro ningún tutorial sobre cómo implementarlas. Cualquier orientación sería muy apreciada.

Respuesta

4

JAX-WS utiliza JAXB para este tipo de mapeo , entonces las clases deben ajustarse a esa especificación. Puede encontrar anotaciones JAXB en el paquete java.xml.bind.annotations.

Si desea formar una clase no anotada, se ajustan a las normas de JavaBeans deben trabajar:

public class Foo { 
    private String bar; 
    public String getBar() { return bar; } 
    public void setBar(String bar) { this.bar = bar; } 

    public static void main(String[] args) { 
    Foo foo = new Foo(); 
    foo.setBar("Hello, World!"); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    JAXB.marshal(foo, out); 
    foo = (Foo) 
     JAXB.unmarshal(new ByteArrayInputStream(out.toByteArray()), Foo.class); 
    System.out.println(foo.getBar()); 
    } 
} 

Si desea utilizar constructores con argumentos, etc. mirar las partes de la spec acerca métodos de fábrica y adaptadores.

+0

Gracias McDowell, la información acerca de las anotaciones ayuda mucho. – Benji

5

Si está utilizando la interfaz de NetBeans para diseñar su ws.

  • pinche en añadir nueva operación

enter image description here

  • Seleccionar el tipo de cambio, busque su clase (como se muestra)
+0

Lo he intentado, y NetBeans genera el código correctamente, pero GlassFish no desplegará nada que use mis clases personalizadas como tipos de devolución. Esencialmente cualquier cosa que tenga un constructor args, o un método, es rechazada. Lo que significa que la única forma de establecer los valores de campo es hacerlos públicos: no exactamente ideales. ¿El método que mencionaste funcionó para ti? Tal vez es algo malo con GlassFish en lugar de mi código ... – Benji

+0

y lo implementé en tomcat. puede publicar el registro de error aquí –

+0

Lo he probado en la máquina de mi amigo. He aquí que todo funciona. Culpo a NetBeans 7.0. Gracias por su ayuda, Jigar Joshi – Benji

Cuestiones relacionadas