2011-11-18 57 views
1

我正在嘗試創建一個動態代理,將圍繞Web服務包裝EJB,因爲應用程序服務器不支持在沒有專有路由器項目生成的情況下創建基於EJB的Web服務。如何將註釋添加到Java中的動態代理類中?

我的想法是創建一個動態代理,以及一些如何使用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) 

回答

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)); 
相關問題