2010-05-13 41 views
4

場景: 創建一些web服務作爲@Stateless bean,將其打包爲ejb jar。結果 - 無法訪問wsdl文件。@WebServices as @Stateless會話bean在ejb jar中

目標:我希望使用@WebServices作爲@Stateless會話,使用ejb jar打包包含可訪問的wsdl文件形式的web。

Web服務:

@Stateless 
@WebService(serviceName = "ws.isp.SecurityService", wsdlLocation = "META-INF/wsdl/SecurityService.wsdl") 
public class SecurityService{ 
    @EJB 
    private Kerberos factory; 

    @EJB 
    private UsersServiceBean uService; 

    public SecurityService() { 
    } 

    @WebMethod 
    @WebResult(name = "SimpleResponse") 
    public SimpleResponse LogOut(
      @WebParam(name = "sessionUUID", targetNamespace = "https://secure.co.ua/ws/") 
      String sessionUUID 
    ) { 
     SimpleResponse resp = new SimpleResponse(); 
     try{ 
     factory.removeSession(sessionUUID); 

     resp.setError(WSErrorCodes.SUCCESS); 
     }catch (Exception e){ 
      e.printStackTrace(); 
      resp.setError(WSErrorCodes.UNRELOSVED_ERROR); 
     } 
     return resp; 
    } 

    @WebMethod 
    public MySession logIn(
      @WebParam(name = "username", targetNamespace = "https://secure.co.ua/ws/") 
      String username, 
      @WebParam(name = "password", targetNamespace = "https://secure.co.ua/ws/") 
      String password){ 
     MySession result = new MySession(); 
     try { 
      UserSession us = factory.creatSession(uService.getUser(username, password).getId()); 
      result.setSessionID(us.getSessionUUID().toString()); 
      result.setError(WSErrorCodes.SUCCESS); 
     } catch (NullPointerException e){ 
      e.printStackTrace(); 
      result.setError(WSErrorCodes.UNRELOSVED_USER); 
     } catch (Exception e){ 
      e.printStackTrace(); 
      result.setError(WSErrorCodes.UNRELOSVED_ERROR); 
     } 
     return result; 
    } 

} 

在這種情況下,我越來越

無效的WSDL請求 http://192.168.44.48:8181/ws.isp.SecurityService/SecurityService

當我嘗試訪問WSDL ,如果不使用說明wsdlLocation我得到空白頁。

Web服務,因爲它自我工作良好。

問題1:在ejb jar中描述web服務的wsdl文件位置是無狀態的規則是什麼。

問題2:是否可以在maven打包過程中生成wsdl文件?

Q3:MAVE 2,EJB 3.1,GlassFish的:如何生成Web服務WSDL文件,我們有這樣的註解如@Stateless和@EJB

環境(目前我只能通過評論那些標註生成它) v3,jax-ws 2.x

謝謝!

回答

2

Q1。在ejb jar中將web服務的wsdl文件位置描述爲無狀態的規則是什麼。

如果通過wsdllocation屬性提供,似乎地鐵使用這使得EJB JAR的META-INF/wsdl一個不錯的選擇放置的WSDL的類加載器讀取的WSDL。 我在我這邊測試了以下EJB:

@Stateless 
@WebService(wsdlLocation = "META-INF/wsdl/HelloService.wsdl") 
public class HelloService { 
    public String hello(String name) { 
     return "Hello, " + name + "!"; 
    } 
} 

的WSDL位於在src/main/resources/META-INF/wsdl/在我的EJB Maven項目。

並訪問http://localhost:8080/HelloServiceService/HelloService?wsdl顯示我的 WSDL(而不是一個動態生成的)。

所以問題是,你試過http://192.168.44.48:8181/ws.isp.SecurityService/SecurityService?wsdl?第二季度銷售價格指數爲:

Q2。是否有可能在maven打包過程中生成wsdl文件?

jaxws-maven-plugin:wsgen目標可以做到這一點(見genWsdl參數),但我必須承認,我完全失去了現在。

當使用Java優先方法時,您可以讓JAX-WS運行時在部署時動態生成WSDL,或者您提供一個靜態版本並使用wsdlLocation。但是,生成WSDL並使用wsdlLocation沒有太大的意義IMO。重點是什麼? wsgen的文檔以某種方式證實了這一點:

默認情況下,wsgen不會生成WSDL文件。這個標誌是可選的,並且會導致wsgen生成一個WSDL文件,並且通常只用於使開發人員可以在部署端點之前查看WSDL。

Q3。如何生成Web服務WSDL文件,我們有這樣的註解如@Stateless和@EJB

我不明白的問題(目前我只能通過評論那些註解產生的話),我不明白爲什麼你想要生成WDSL(見上文)。

+0

> Q1。是的,我嘗試http:// localhost:8080/HelloServiceService/HelloService?wsdl,而不是wsdl我得到 >無效的wsdl請求http://192.168.44.48:8181/ws.isp.SecurityService/SecurityService > Q2謝謝,它應該有幫助 > Q3 - 問題出在wsgen上 - 如果像@Stateless和@EJB這樣的註釋在那裏使用,它就不能從java文件生成wsdl。 – 2010-05-14 07:52:14

相關問題