使用 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 引用时相同的文件?

wsdl的web服务怎么调用

能否结合来自 WCF 服务的 WSDL 和 XSD 数据?

如何在Hybris中为WSDL文件生成Java类?

WSDL for SOAP 和 WSDL for REST 和基于 JSON 的 REST

在 iphone sdk 中使用 wsdl 实现 Web 服务