2010-09-01 174 views
1

應用程序配置的Java EE 5 JAX-WS 2.0 Web服務:使用帶註釋創建JAX-WS 2.0 Web服務的Java的第一種方法如何初始化參數

  • Web應用程序。
  • 的WebLogic 10.3

我的要求

我是基於從該服務被訪問的URL來部署一個Web服務實現類,而是更改邏輯的要求。

問題: 我假設一個好辦法,這樣做是爲了在web.xml部署不同的映射,並使用不同的參數初始化。有沒有更好的辦法?

將邏輯從訪問Web服務的URL切換出去的最佳方式是什麼?我應該嘗試在web.xml中使用初始化參數配置兩個servlet映射(嘗試過,但無法讓它工作),還是應該解析服務impl中的URL?任何其他的選擇?

我試了一下(但不工作)

我已經嘗試添加在web.xml中<init-param><servlet>元素。但是,無法訪問Web服務中的ServletConfig對象來檢索參數。 Web服務不具有標準Servlet的所有功能(即使我實現ServletServletContextListener)。我只能訪問WebServiceContext(看來),從那裏我只能得到<context-param>元素 - 但我需要<init-param>元素。

在web.xml中,我使用相同的Java類輸入了兩個<servlet>元素,但它們映射到兩個不同的URL,如下所示。注意每個Servlet映射中「source」參數的不同。

<servlet> 
    <servlet-name>Foo</servlet-name> 
    <servlet-class>com.Foo</servlet-class> 
    <init-param> 
     <param-name>source</param-name> 
    <param-value>1</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Foo</servlet-name> 
    <url-pattern>/Foo</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>Bar</servlet-name> 
    <servlet-class>com.Foo</servlet-class> 
    <init-param> 
     <param-name>source</param-name> 
    <param-value>2</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Bar</servlet-name> 
    <url-pattern>/Bar</url-pattern> 
</servlet-mapping> 

回答

1

你很可能有,但你在運行時是否嘗試使用MessageContext來確定源是什麼?

@WebService 
public class CalculatorService implements Calculator 
{ 

    @Resource 
    private WebServiceContext context; 

    @WebMethod 
    public void getCounter() 
    { 
     MessageContext mc = wsContext.getMessageContext(); 
     // you can grab the HttpSession 
     HttpSession session = (HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession(); 
     // ...or maybe the path info is enough 
     String path = mc.get(MessageContext.PATH_INFO); 
     // the query itself should almost definitely be enough 
     String query = (String) mc.get(MessageContext.QUERY_STRING); 
    } 

} 

我從http://sirinsevinc.wordpress.com/category/jaxws/得到了主意。雖然沒有嘗試過。

+0

該解決方案或一個類似解決方案似乎是唯一的解決方案。我會將此邏輯添加到在入站請求中的鏈中執行的Soap處理程序(在此處設置消息中的參數)。感謝您的想法。我希望這將是一個簡單的配置,但它看起來會比這更多。 – Steve 2010-09-15 15:53:23

+0

@Steve:祝你好運! – 2010-09-15 21:22:58