maven cxf-codegen-plugin (org.apache.cxf) を使用して Java コードを生成する 2 つの WSDL があります。どちらも同じ名前空間を使用し、同じ名前の複雑な型が含まれているため、競合する Java クラス名の問題が発生しました。bindings.xml を使用して解決することにしました。
<jaxws:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns="http://www.w3.org/2001/XMLSchema"
version="2.1">
<jaxws:bindings wsdlLocation="./TaskService_v1.wsdl" node="xsd:schema">
<jaxb:schemaBindings>
<jaxb:nameXmlTransform>
<jaxb:typeName prefix="TaskService" />
<jaxb:elementName prefix="TaskService" />
</jaxb:nameXmlTransform>
</jaxb:schemaBindings>
</jaxws:bindings>
</jaxws:bindings>
たとえば、生成されたクラス B2BParameter を TaskServiceB2BParameter に名前を変更したため、競合する名前の問題が発生しなくなりましたが、別の問題に遭遇しました。
Unknown JAXB exception; nested exception is com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 4 counts of IllegalAnnotationExceptions
Two classes have the same XML type name "{http://serviceinterface.b2b.adx.com}B2BParameter". Use @XmlType.name and @XmlType.namespace to assign different names to them.
this problem is related to the following location:
at com.adx.b2b.serviceinterface.TaskServiceB2BParameter
this problem is related to the following location:
at com.adx.b2b.serviceinterface.B2BParameter
at protected java.util.List com.adx.b2b.serviceinterface.B2BRequest.parameter
at com.adx.b2b.serviceinterface.B2BRequest
...
これは生成された TaskServiceB2BParameter.java です。
package com.axd.b2b.serviceinterface_v1;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "B2BParameter", propOrder = {
"name",
"value"
})
public class TaskServiceB2BParameter {
...
}
bindings.xml を更新して @XmlType.name を適切に変更するにはどうすればよいですか? または、本当にターゲット パッケージを変更する必要がありますか? 前もって感謝します!