【问题标题】:Missing namespace in the javas generated by wsimportwsimport 生成的 java 中缺少命名空间
【发布时间】: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


    【解决方案1】:

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

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

    相当于没有@XmlSchema,在所有@XmlElement/@XmlRootElement注解中加上namespace参数。它们将产生/使用相同的 XML 文档。

    更多信息

    【讨论】:

      猜你喜欢
      • 2017-04-22
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多