【发布时间】:2011-02-19 00:20:56
【问题描述】:
场景: 创建一些 Web 服务作为 @Stateless bean,将其打包为 ejb jar。结果 - 无法访问 wsdl 文件。
目标:我想使用 @WebServices 作为 @Stateless 会话,使用 ejb jar 打包和可访问的 wsdl 文件表单。
网络服务:
@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
谢谢!
【问题讨论】:
标签: maven-2 wsdl jax-ws java-ee-6 ejb-3.1