1

我正在使用 Enunciate 为我正在处理的 Wicket Web 应用程序生成一个 SOAP 端点,我有几个问题我还没有找到解决方案。

1 如何更改 xsd 文件的名称?我浏览了常见问题解答,它告诉我做类似的事情:

<xml>
    <schema namespace="http://api.example.com/data" file="data.xsd"/>
</xml>

但是,我还没有完全弄清楚如何为我的数据对象设置 targetNamespace。我已经通过 @WebService ( targetNamespace="blah" ) 为我的服务完成了这项工作,但是如何注释我的数据对象以让 Enunciate 知道它们应该属于哪个命名空间?

2 Enunciate 可以很好地生成我的 XSD,但我并不特别喜欢它使用的元素名称。我有一个 ServiceRequest 和 ServiceResponse 对象。ServiceRequest 对象有一个用户对象列表。ServiceResponse 有一个 Group 对象列表。Enunciate 建议 ServiceRequest 中的每个“用户”对象都应该使用标签“<users>”。我觉得使用单数形式“<user>”更有意义,因为标签实际上只包含一个用户。是否有可能改变这种行为,如果可以,如何改变?

提前致谢。

4

1 回答 1

2

所以要明确一点,除了关于命名模式文件的问题之外,您的问题实际上更多是关于 JAXB,而不是关于 Enunciate。JAXB 是定义 Java 对象如何(反)序列化到 XML 或从 XML 序列化的规范,并且 Enunciate 符合该规范。

无论如何,将命名空间应用于 Java 对象的最简单方法是使用 Java 类包中的 package-info.java 文件。使用 @XmlSchema 注释您的包并将命名空间设置为您想要的值。

可以使用 @XmlElement 注释自定义访问器如何序列化到 XML 或从 XML 序列化,例如:

public class MyClass {
  ...
  @XmlElement (name="user")
  List<User> users;
  ...
}

这是 JAXB javadocs

https://jaxb.dev.java.net/nonav/2.1.9/docs/api/

或者谷歌一个好的 JAXB 教程。

于 2010-10-11T15:36:24.837 回答