我正在尝试创建一个动态代理,它将EJB包装在Web服务中,因为应用程序服务器不支持在没有专有路由器项目生成的情况下创建基于EJB的Web服务。
我的想法是创建一个动态代理,以及一些如何使用InitServlet启动它。现在我有点想弄清楚如何动态设置注释,这样我就不会得到以下错误。
class $Proxy0 has neither @WebSerivce nor @WebServiceProvider annotation
at com.sun.xml.internal.ws.server.EndpointFactory.verifyImplementorClass(EndpointFactory.java:277)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.getPrimaryWsdl(EndpointImpl.java:273)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.java:213)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:143)
答案 0 :(得分:1)
最近我遇到了同样的问题。似乎大多数人都说不可能。见http://softwarecarnival.blogspot.be/2009/02/java-annotations-and-proxies.html
如果你拥有的界面是:
interface XXXInterface{
Result doStuff1(String param1)
}
然后解决方法是为代理创建一个也将实现Web服务的委托人。
@WebService
public class WebServiceDelegateToXXXServer implements XXXInterface{
public WebServiceDelegateToXXXServer(XXXInterface actualImplementor){
this.actualImplementor = actualImplementor;
}
public Result doStuff1(String param1){
return actualImplementor.doStuff1(param1);
}
}
然后你将发布
XXXInterface proxy = createProxyAsXXXInterface();
Endpoint.publish(url, new WebServiceDelegateToXXXServer(proxy));