lpi*_*.eu 5 java web-services jax-ws jaxb
我有一个用Java(1.6)创建的Web服务,使用maven的metro(2.0),在Tomcat 6下.在所有Web方法中,返回类型是泛型类:
public class WsResult<T> {
protected T result; // the actual result
protected Code requestState; // 0K, or some error code if needed
protected String message; // if error, instead of result, insert a message
}
Run Code Online (Sandbox Code Playgroud)
例如:
public WsResult<OtherClass> someMethod(...);
public WsResult<Foo> someMethod_2(...);
Run Code Online (Sandbox Code Playgroud)
在客户端:
MyServiceService service = new MyServiceService();
MyService port = service.getMyServicePort();
WsResult result = port.someMethod(...);
OtherClass oc = (OtherClass) result.getResult();
WsResult res = port.someMethod_2(...);
Foo o = (Foo) res.getResult();
Run Code Online (Sandbox Code Playgroud)
在一些网络方法中,它正在运作.但是当结果是具有List<? class>属性的类时,它无法解组.
该项目是最大项目的一部分.因此,出于测试目的,我创建了一个新的,更简单的,只是项目,使用相同的数据模型,并复制其中一个Web方法,在这种情况下它工作,并且在unmarshal之后,我有一个结果,我可以投射到预期的类型.
可能会发生什么?
编辑:
答案是肯定的解决方案,但会为添加到字段声明中的每种类型生成一个getter.有没有更好的办法?
我不太确定我是否完全理解您的问题,但对我来说,您对 JAXB 的期望似乎有点过高。您的WsResult不受限制的参数是通用的,这意味着在运行时除了 JAXB 可以使用的引用T之外什么都没有剩下。Object
宽泛地说,JAXB 真正需要处理这种情况的是,提示要实例化哪个类来填充该result字段。要填写此内容,您应该
WsResult(例如,按照您的示例,class OtherClassResult extends WsResult<OtherClass>--当您在 JAXB 中抛出 时OtherClassResult,它会知道result需要是 的实例,OtherClass并且有机会采取相应的行动,或者result字段@XmlElements,如下所示:Run Code Online (Sandbox Code Playgroud)@XmlElements({ @XmlElement(name = "text", type = String.class), // add more elems here @XmlElement(name = "other", type = OtherClass.class)}) protected Object result;
| 归档时间: |
|
| 查看次数: |
539 次 |
| 最近记录: |