使用 WSDL,我们能否在作为 Web 服务方法参数的类中生成其他公共方法?
Posted
技术标签:
【中文标题】使用 WSDL,我们能否在作为 Web 服务方法参数的类中生成其他公共方法?【英文标题】:Using WSDL, can we generate other public methods inside a class that is a parameter of a Web Service Method? 【发布时间】:2011-08-15 09:58:39 【问题描述】:对不起,如果问题没有明确说明我需要什么......请提前阅读要求。
我正在使用 JAX-WS 2.2.3。
我已经实现了一个 Web 服务类,它有一个方法 int addRecord(Record)。 Record 类包含一个实例成员作为 Attribute 类的集合。现在,Record 类包含一个公共 void addAttribute(Attribute objAttribute) 方法。
我已经使用 wsgen ant 任务为这个类生成了 WSDL。
当我对该 WSDL 以及其他类执行 wsimport 时,我只得到一个包含实例成员的 set/get 方法的 Record 类,而不是 void addAttribute(Attribute objAttribute) 方法.
有没有办法在 Record 类上也获得这个方法?
SOURCE CODE:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Record")
public class Record implements Serializable
/**
*
*/
private static final long serialVersionUID = 1L;
@XmlElement(name = "AttributeList")
List<Attribute> objAttributeList;
public void addAttribute(Attribute objAttribute)
objAttributeList.add(objAttribute);
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Attribute")
public class Attribute implements Serializable
@XmlElement(name = "Id")
int id;
@XmlElement(name = "Name")
String name;
@XmlElement(name = "Value")
Object value;
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
public Object getValue()
return value;
public void setValue(Object value)
this.value = value;
@WebService
class RecordService
@WebMethod
public int addRecord(Record objRecord)
//code to process record object
【问题讨论】:
你在方法中添加了WebMethod注解吗?你能发布你的代码吗? @Searock 我已经编辑了帖子。抱歉这么晚才编辑。 【参考方案1】:不 - 不使用 Web 服务。
Web 服务的系统隐喻是消息传递。有一个客户端和一个服务器,它们通过预先安排的通信协议或合同交换消息。消息和交换在 WSDL 中描述。
您想象的是一个分布式对象系统,您在其中传输对象,而不是消息。这通常不是 Web 服务工具(适用于任何平台)支持的模型。
考虑更改您的架构以使用 DTO - Data Transfer Objects - 用于交换的内容。然后在不同的业务级对象中实现逻辑,这些对象可能使用Adapter pattern 从 DTO 中获取它们的状态。如果您愿意,业务对象可以是共享数据类型;换句话说,一个单独的 JAR 定义了类型,并在客户端和服务器中被引用。
【讨论】:
以上是关于使用 WSDL,我们能否在作为 Web 服务方法参数的类中生成其他公共方法?的主要内容,如果未能解决你的问题,请参考以下文章
wsdl.exe 能否生成与 Visual Studio 添加 Web 引用时相同的文件?