2010-05-13 87 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

相关问题