使用自定义类作为JAX-WS返回类型?

时间:2011-05-17 09:27:09

标签: java jax-ws marshalling

我正在使用NetBeans的Web服务生成工具。我查看了可用的教程,但找不到任何关于如何使用自定义类作为返回类型的内容。我读过的大多数教程都不比Hello World复杂:它们采用并返回像Strings这样的简单类型。

所以说我想要一个有3个字段的类:String,int和double []。到目前为止,我可以传递自己的类的唯一方法是创建“包络类”,没有方法,没有参数的构造函数,并且所有字段都声明为public。我更喜欢编写标准的Java类。显然我无法通过SOAP发送方法,但我认为有一种方法可以在编组类时忽略这些方法,并且只有Marshall这些字段。

有人告诉我有注释可以促进这一点,但我找不到任何关于如何实现它们的教程。任何指导都将不胜感激。

2 个答案:

答案 0 :(得分:5)

如果您使用NetBeans界面来设计您的ws。

  • 点击添加新操作

enter image description here

  • 选择返回类型,浏览您的课程(如图所示)

答案 1 :(得分:4)

JAX-WS使用JAXB作为映射类型,因此类应符合该规范。您可以在java.xml.bind.annotations包中找到JAXB注释。

如果要编组非注释类,请遵守JavaBeans应该工作的规则:

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());
  }
}

如果你想使用带参数的构造函数等,请查看spec关于工厂方法和适配器的部分。