使用WSDL,我们可以在作为Web服务方法的参数的类中生成其他公共方法吗?

时间:2011-04-29 10:36:07

标签: java web-services wsdl jax-ws

对不起,如果问题没有明确说明我需要的内容......请提前阅读该要求。

我正在使用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 } }

1 个答案:

答案 0 :(得分:0)

不 - 不是网络服务。

Web服务的系统隐喻是消息传递。有一个客户端和一个服务器,他们通过预先安排的通信协议或合同交换消息。 WSDL中描述了消息和交换。

您所想象的是一个分布式对象系统,您可以在其中传输对象而不是消息。这通常不是Web服务工具(针对任何平台)支持的模型。

考虑更改您的体系结构以使用DTO - Data Transfer Objects - 用于交换的内容。然后在不同的业务级对象中实现逻辑,这些对象可能使用Adapter pattern从DTO中篡改其状态。如果您愿意,业务对象可以是共享数据类型;换句话说,一个JAR定义了类型,并从客户端和服务器内引用。