使用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应该自动发生)。
非常感谢任何建议
我尝试了什么:
最近我发现与名称空间有关的是在XSD本身和WSDL中的导入部分中指定了'elementFormDefault =“qualified”。
答案 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文档。
了解更多信息