【发布时间】:2014-01-20 14:57:09
【问题描述】:
当使用“标准”方式使用 wsimport 时:
wsimport.exe -d C:/temp/generatedClasses -s C:/temp/sourceFiles C:/temp/myWsdl.wsdl
我得到这样生成的源文件:
@XmlRootElement(name = "PingRequest")
public class PingRequest{
上次生成类时,应该使用相同的 WSDL/XSD,并生成如下输出:
@XmlRootElement(name = "PingRequest", namespace = "http://me.foo.bar/any/")
public class PingRequest {
因此,模式命名空间作为注释的属性包含在内。由于生成的类 package-info.java 有以下条目:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://me.foo.bar/any", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
我假设添加命名空间属性是通过配置 wsimport/jaxb 模式编译器完成的。
谁能解释一下如何归档包含的命名空间属性?
更新:正如 Blaise 正确回答(在博客链接中描述),生成的文件 package-info.java 定义了相应包内所有类/类型的命名空间。如果每个 @RootElement 始终包含相同的命名空间,则上述示例已过时。在@RootElement 级别设置命名空间可用于让某个@RootElement 拥有自己的命名空间(在wsimport 的情况下应该自动发生)。
非常感谢您的任何建议
我尝试了什么:
- 使用谷歌,发现https://www.java.net/node/681149(完全是我2008年的问题)没有答案:(
- 读取 wsimport/jaxb 模式编译器选项,尝试了各种只控制包输出的方法
- 阅读我输入此问题标题时弹出的 12 个类似问题/答案
我发现与命名空间有关的最接近的方法是在 XSD 本身和我所做的 WSDL 中的导入部分中都指定了“elementFormDefault="qualified”。
【问题讨论】:
标签: java xml jaxb wsdl wsimport