场景:创建一些Web服务作为@Stateless bean,将其打包为ejb jar。结果 - 无法访问 wsdl 文件。
目标:我想将@WebServices 用作@Stateless 会话,使用ejb jar 打包和可访问的wsdl 文件形式的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 服务,因为它自我运作良好。
Q1:在 ejb jar 中将 Web 服务的 wsdl 文件位置描述为无状态的规则是什么?
Q2:maven打包时是否可以生成wsdl文件?
Q3:如何为我们有@Stateless和@EJB等注解的Web服务生成wsdl文件(目前我只能通过注释这些注解来生成它)
环境:mave 2、ejb 3.1、glassfish v3、jax-ws 2.x
谢谢!