[英]XJB and JAXB binding on simpleType with same name
我正在嘗試使用jaxb和spring生成JAVA代碼但是當我使用具有相同名稱但具有不同名稱空間的2個simpleType的wsdl文件時,我無法使其工作。 有誰知道我怎么解決這個問題?
我一直在嘗試使用jaxb:factoryMethod
標簽,但我無法正確使用語法。 但也許有一種更簡單的方法?
binding.xjb
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:annox="http://annox.dev.java.net"
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
jaxb:extensionBindingPrefixes="xjc annox"
version="2.1"
targetNamespace="http://com.company/generated"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<jaxb:globalBindings>
</jaxb:globalBindings>
<jaxb:bindings
node="/wsdl:definitions/wsdl:types/xs:schema[namespace::*[.='http://com.company/storetaxinformation']]/xs:simpleType[@name='TypeOfTax']"
schemaLocation="../../../target/classes/disb.wsdl">
<annox:annotateClass>@javax.xml.bind.annotation.XmlRootElement(name="TypeOfTaxStoreTax")</annox:annotateClass>
</jaxb:bindings>
<jaxb:bindings
node="/wsdl:definitions/wsdl:types/xs:schema[namespace::*[.='http://com.company/gettaxinformation']]/xs:simpleType[@name='TypeOfTax']"
schemaLocation="../../../target/classes/disb.wsdl">
<annox:annotateClass>@javax.xml.bind.annotation.XmlRootElement(name="TypeOfTaxInfo")</annox:annotateClass>
</jaxb:bindings>
</jaxb:bindings>
error.log中
[ERROR] Error while generating code.Location [ file:/C:/wsdl/disb.wsdl{49,52}].
com.sun.istack.SAXParseException2; systemId: file:/C:/wsdl/disb.wsdl;
lineNumber: 49; columnNumber: 52; Two declarations cause a collision in the ObjectFactory class.
不, @XmlRootElement
無濟於事。 它是關於ObjectFactory
的方法名稱。
你確定它是導致碰撞的簡單類型嗎? XJC指出ObjectFactory
方法,因此它應該是全局元素,而不是簡單類型
以下是factoryMethod
自定義的示例:
<jaxb:bindings
schemaLocation="http://schemas.opengis.net/citygml/texturedsurface/1.0/texturedSurface.xsd"
node="/xs:schema">
<jaxb:bindings node="xs:element[@name='_Appearance']">
<jaxb:factoryMethod name="AAppearance"/>
</jaxb:bindings>
</jaxb:bindings>
您需要找出導致碰撞的元素並對其進行自定義。 不是簡單的類型。
我們現在已經解決了這個問題,而<generatePackage>
元素導致了部分問題。 我們還確保將每個模式/命名空間綁定到它自己的包。 這樣ObjectFactory類就不會抱怨。
的pom.xml
...
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.12.3</version>
<executions>
<execution>
<id>generate-sources-servicename</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<!-- see binding.xjb
<generatePackage>com.company.generated</generatePackage>
-->
<extension>true</extension>
<forceRegenerate>true</forceRegenerate>
<bindingIncludes>
...
binding.xjb
<jaxb:bindings schemaLocation="../../../target/classes/disb.wsdl"
node="/wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://com.company/generated/storetax']" >
<jaxb:schemaBindings>
<jaxb:package name="com.company.generated.storetax"></jaxb:package>
</jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings schemaLocation="../../../target/classes/disb.wsdl"
node="/wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://com.company/storeaccount']" >
<jaxb:schemaBindings>
<jaxb:package name="com.company.generated.storeaccount"></jaxb:package>
</jaxb:schemaBindings>
</jaxb:bindings>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.