缺少wsimport生成的javas中的命名空间

时间:2014-01-20 14:57:09

标签: java xml jaxb wsdl wsimport

使用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 {

因此,schemas命名空间作为注释的属性包含在内。由于生成的类package-info.java具有以下条目:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://me.foo.bar/any", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

我假设添加namespace-attribute是通过配置wsimport / jaxb架构编译器完成的。

有人能解释一下如何归档包含的命名空间属性吗?

更新:由于Blaise正确回答(在blog-link中描述),生成的文件package-info.java定义了相应包中所有类/类型的命名空间。如果@RootElement始终包含相同的命名空间,则上面的示例已过时。在@RootElement级别设置名称空间可用于使某个@RootElement具有自己的名称空间(如果wsimport应该自动发生)。

非常感谢任何建议

我尝试了什么:

  • 使用谷歌,发现https://www.java.net/node/681149(我在2008年回答了我的问题)没有回答:(
  • 阅读wsimport / jaxb架构编译器选项,尝试了各种只控制包输出
  • 阅读12个类似的问题/答案,当我输入这个问题的标题时,这个问题/答案就会增加。

最近我发现与名称空间有关的是在XSD本身和WSDL中的导入部分中指定了'elementFormDefault =“qualified”。

1 个答案:

答案 0 :(得分:1)

在包级别指定以下注释,而不是在所有@XmlElement / @XmlRootElement注释上指定命名空间。

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://me.foo.bar/any", 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

相当于没有@XmlSchema并将namespace参数添加到所有@XmlElement / @XmlRootElement注释中。他们将生成/使用相同的XML文档。

了解更多信息