我想创建一个公开了多个端口类型的SOAP服务,其中每个端口类型都有一个单独的接口。我正在尝试使用JAX-WS2.0来实现这一点。
示例:
interface A:
ObjectA get(String name);
interface B:
ObjectB get(String name);
Service:
port A
get
port B
get
我遇到的问题是,@WebService是使用单个类/接口定义的,所以我能够设置的唯一方法就是拥有两个独立的服务。每个服务由一个带有@WebService注释的单独类实现。
我想使用相同的服务公开这两个端口,以明确它们都是同一个API的一部分。这个是可能的吗?
实际上,我所追求的是在WSDL中具有某种嵌套的名称空间支持,这样我就可以在不同的名称空间中使用相同的方法。我将为不同类型的数据提供一个接一个的get/ set /delete方法,但我不希望将它们都放在getA/getB等相同的大接口中,因为我希望以后能够添加新的数据类型,而不会强迫所有客户端从新的WSDL集重新生成。任何实现这一目标的技巧都是受欢迎的,即使这意味着要使用另一种从java代码生成WSDL的方法。
发布于 2010-12-28 22:21:08
您可以尝试重命名其中一个方法,并在@WebMethod注释中显式设置操作或operationName字段。
发布于 2013-12-17 20:36:44
我建议您考虑为每个方法定义一个RequestType (xsd中的复杂类型),而不是将输入参数定义为字符串,这将为您提供以下优势:
另一方面,我建议让您的操作名称和消息名称尽可能地唯一和具体。
发布于 2014-05-02 06:30:03
Webservices不接受函数重载。我的意思是同名的多个操作是不能做的。如果您需要使用相同的端口和相同的操作名称来返回不同的类对象,您可以尝试以下方法。
接口
public interface OB {
public Object get(String name);
}
网络服务
@Override
@WebMethod
public Object get(String name) {
if(name.equals("A")){
return new ObjectA("A");
}else if(name.equals("B")){
return new ObjectB(1);
}else {
return null;
}
}
在这种情况下,您必须确定需要从请求中返回哪个类对象,然后构造它,返回是其中一种方法。
https://stackoverflow.com/questions/3636630
复制