我有一个WSDL文件,它导入了几个XML Schema,每个都有相同的命名空间(让我们称之为A)。我正在尝试使用JAXB外部绑定文件来更改这些模式的生成包名称(比如说B)。这是一个例子:
我有一个POM文件,其中包含从WSDL生成代码的配置(使用cxf-codegen-plugin)。
我的WSDL:
<definitions ...>
<types>
<xsd:schema elementFormDefault="qualified" targetNamespace="C">
<xsd:import namespace="A" schemaLocation="SCHEMA_REF"/>
<xsd:import namespace="A" schemaLocation="SCHEMA_REF"/>
...
</xsd:schema>
</types>
...
</definitions>
这是我的实际绑定文件根本不起作用,似乎根本没有应用(没有错误信息......)。
<jaxws:bindings wsdlLocation="WSDL_LOCATION" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" jaxb:version="2.0">
<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='C']/xs:import[@namespace='A']">.
<jaxb:schemaBindings>
<jaxb:package name="B" />
</jaxb:schemaBindings>
</jaxws:bindings>
</jaxws:bindings>
因为我在生成中没有任何错误消息,可能是因为用于访问导入模式的XPath表达式不好......
你们有什么线索吗? 我有点被困在这里......
提前感谢您的投入!
答案 0 :(得分:1)
尝试编写绑定 - 如果将schema-import合并到WSDL文档中,则直接引用其命名空间:
<jaxws:bindings wsdlLocation="WSDL_LOCATION"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
jaxb:version="2.0">
<jaxws:bindings
node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='A']">
<jaxb:schemaBindings>
<jaxb:package name="B" />
</jaxb:schemaBindings>
</jaxws:bindings>
</jaxws:bindings>
这对我有用。感谢this post演示使用导入的架构。
答案 1 :(得分:0)
有趣的是,你没有答案:)不幸的是,你无法存档你想要的东西。唯一的方法是为你拥有的每个模式文件定义单独的绑定文件,这样可以正常工作。