我想知道我是否在jax-ws中使用了泛型方法,例如:
public List<MyCustomClass> getSomething()
Run Code Online (Sandbox Code Playgroud)
jax-ws支持这个吗?在客户端,该方法的返回方式是什么样的?
您将在客户端获取List(如果WS使用者使用其他语言编写,则为MyCustomClass对象数组).这不会是个问题.记住始终编程到接口.
看起来你仍然没有太多练习用Java创建WS,所以我会给你一些建议:
您不得发送包含循环引用的2个或更多对象,否则将以循环引用问题结束.这是因为JAX-WS工具将为请求创建一个无限的XML响应.可能很难发现.我们来看一个案例:
public class ClassA {
ClassB instanceOfB;
//getters and setters...
}
public class ClassB {
ClassA instanceOfA;
//getters and setters...
}
public class MyJAXWS {
@WebMethod
public ClassA getClassA() {
ClassA classA = new ClassA();
ClassB classB = new ClassB();
classB.setInstanceOfA(classA);
classA.setInstanceOfB(classB);
return classA; //boom! circular reference problems!
}
}
Run Code Online (Sandbox Code Playgroud)您必须始终在返回类中具有接口,而不是特定的Java库类.这意味着,您的类应该具有List,Set并且Map(在容器的情况下),因为此接口比实现类更高级别,并且如果非Java客户端尝试使用您的Web服务方法,则可能会出现问题.
public class ClassC {
List<ClassA> lstClassA; //good!
ArrayList<ClassB> alstClassB; //not very flexible with other languages =\
}
Run Code Online (Sandbox Code Playgroud)将通过Web服务的类应该是POJO(Plain Old Java Objects),而不是服务或业务逻辑层类.为什么?因为在与客户端通信时,只有属性值将被编组/解组,所以 Web服务的合同中不会出现任何方法代码.
public class ClassD {
private int intValue;
//naive business logic method
//won't be generated in the WSDL for the clients/consumers of the Web Services
public void printIntValue() {
//pretty simple implementation
System.out.println(this.intValue);
}
}
Run Code Online (Sandbox Code Playgroud)我在上一次使用Java的SOA项目中遇到了这三个问题.我希望其他人可以增强这个答案或提供链接信息.
| 归档时间: |
|
| 查看次数: |
2617 次 |
| 最近记录: |