Maven 2 @WebServices作为ejbjar中的@Stateless会话bean
情景: 将一些web服务创建为@statelessbean,将其打包为EJBJAR。结果-无法访问wsdl文件 目标:我想使用带有可访问的wsdl文件表单web的ejbjar打包,将@WebServices用作@Stateless会话 网络服务:Maven 2 @WebServices作为ejbjar中的@Stateless会话bean,maven-2,wsdl,jax-ws,java-ee-6,ejb-3.1,Maven 2,Wsdl,Jax Ws,Java Ee 6,Ejb 3.1,情景: 将一些web服务创建为@statelessbean,将其打包为EJBJAR。结果-无法访问wsdl文件 目标:我想使用带有可访问的wsdl文件表单web的ejbjar打包,将@WebServices用作@Stateless会话 网络服务: @Stateless @WebService(serviceName = "ws.isp.SecurityService", wsdlLocation = "META-INF/wsdl/SecurityService.wsdl") public cla
@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请求
当我尝试访问wsdl时
如果不使用wsdlLocation的描述,则会得到空白页
Web服务,因为它自我工作良好
Q1:在EJBJAR中将web服务的wsdl文件位置描述为无状态的规则是什么
问题2:是否可以在maven打包期间生成wsdl文件
问题3:如何为web服务生成wsdl文件,其中我们有@Stateless和@EJB这样的注释(目前我只能通过注释这些注释来生成它)
环境:Mave2、EJB3.1、GlassfishV3、jax ws 2.x
谢谢大家!
问题1。在EJBJAR中将web服务的wsdl文件位置描述为无状态的规则是什么
如果通过wsdllocation属性提供,那么Metro似乎使用类加载器读取wsdl,这使得EJB JAR的META-INF/wsdl
成为放置wsdl的合适选择。
我使用以下EJB进行了测试:
@Stateless
@WebService(wsdlLocation = "META-INF/wsdl/HelloService.wsdl")
public class HelloService {
public String hello(String name) {
return "Hello, " + name + "!";
}
}
WSDL位于我的EJBMaven项目中的src/main/resources/META-INF/WSDL/
中
访问显示的是myWSDL(而不是动态生成的WSDL)
问题是,你试过了吗
问题2。是否可以在maven打包期间生成wsdl文件
目标可以做到这一点(参见参数),但我必须承认,我现在完全迷失了方向
使用Java-first方法时,要么让JAX-WS运行时在部署时动态生成WSDL,要么提供静态版本并使用wsdlLocation
。然而,在我看来,生成WSDL和使用wsdlLocation没有多大意义。这有什么意义?文件以某种方式证实了这一点:
默认情况下,wsgen不生成WSDL文件。此标志是可选的,将导致wsgen生成WSDL文件,通常仅用于开发人员在部署端点之前查看WSDL
第三季度。如何为我们有@Stateless和@EJB注释的web服务生成wsdl文件(目前我只能通过注释这些注释来生成它)
我不理解这个问题,也不理解为什么要生成WDSL(见上文)。问题出在断页检查器中。。所以,当我去的时候,我在web inspector中得到了一个空白页面 对不起,这是假的。>Q1。是的,我尝试了,但是我得到的不是wsdl>无效的wsdl请求>第2季度谢谢,它应该有帮助>第3季度-问题在于wsgen-如果在java文件中使用@Stateless和@EJB之类的注释,它无法从java文件生成wsdl。