我正在使用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对象具有User对象列表。 ServiceResponse具有Group对象列表。 Enunciate表示ServiceRequest中的每个“User”对象都应使用标记“&lt; users&gt;”。我觉得使用单数形式更有意义,“&lt; user&gt;”因为标签实际上只包含一个用户。是否有可能改变这种行为,若然,怎么做?
提前致谢。
答案 0 :(得分:2)
所以要明确一点,除了关于命名模式文件的问题之外,你的问题更多的是关于JAXB而不是关于Enunciate。 JAXB是一个规范,它定义了如何将Java对象(de)序列化到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教程。