对不起,如果问题没有明确说明我需要什么......请提前阅读该要求 .
我正在使用JAX-WS 2.2.3 .
我已经实现了一个web服务类,它有一个方法int addRecord(Record) . Record类包含一个实例成员作为Attribute类的集合 . 现在,Record类包含一个public void addAttribute(Attribute objAttribute)方法 .
我使用wsgen ant任务为此类生成了WSDL .
当我在这个WSDL上执行wsimport时,除了其他类之外,我只得到一个Record类,它包含实例成员的set / get方法,而不是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 回答
不 - 没有网络服务 .
具有Web服务的系统隐喻是消息传递 . 有一个客户端和一个服务器,他们通过预先安排的通信协议或 Contract 交换消息 . WSDL中描述了消息和交换 .
你想象的是一个分布式对象系统,你传输对象而不是消息 . 这通常不是Web服务工具(针对任何平台)支持的模型 .
考虑更改您的架构以使用DTO(Data Transfer Objects)来处理交换的内容 . 然后在不同的业务级对象中实现逻辑,这些对象可能使用Adapter pattern从DTO中篡改其状态 . 如果您愿意,业务对象可以是共享数据类型;换句话说,单个JAR定义类型并从客户端和服务器内引用 .