0
我使用JAX-WS訪問SOAP服務,我有一個數據類型的困難:解析肥皂日期在JAX-WS客戶
<xs:complexType name="OurDateType">
<xs:sequence>
<xs:element name="Day" type="xs:gDay" minOccurs="0">
</xs:element>
<xs:element name="Month" type="xs:gMonth">
</xs:element>
<xs:element name="Year" type="xs:gYear">
</xs:element>
</xs:sequence>
</xs:complexType>
客戶存根是自動生成的,其產生的類型與每個的Day
,Month
一個XmlGregorianCalendar
字段,和Year
:
public class OurDateType {
@XmlElement(name = "Day")
@XmlSchemaType(name = "gDay")
protected XMLGregorianCalendar day;
@XmlElement(name = "Month", required = true)
@XmlSchemaType(name = "gMonth")
protected XMLGregorianCalendar month;
@XmlElement(name = "Year", required = true)
@XmlSchemaType(name = "gYear")
protected XMLGregorianCalendar year;
的SOAP呼叫失敗時從返回的XML解組這樣的結構:
<TheDate xsi:type="ns1:OurDateType">
<Month xsi:type="xsd:gMonth">10</Month>
<Year xsi:type="xsd:gYear">2011</Year>
</TheDate>
錯誤是SOAP exception: Unmarshalling Error: 10
。
我試圖創建一個package-info.java
文件覆蓋解組,但也存在以下問題:
wsimport
創建package-info.java
文件。由於同一個軟件包不能包含`package-info.java的兩個實例,所以我必須編輯生成的代碼。- 之後,我的適配器類被傳遞一個字符串解組沒有任何上下文來告訴這是打算是一天,一個月還是一年。
是否有可能重寫代碼生成並提供自己的類來捕獲此類型,或者以知道原始XML模式類型的方式重寫解組?由於代碼還可以作爲其他三種SOAP服務的客戶端,並且爲其客戶端提供SOAP服務,因此我的能力有限。
僅供參考,這裏的代碼生成的配置:
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<configuration>
<xadditionalHeaders>true</xadditionalHeaders>
<verbose>true</verbose>
<sourceDestDir>${project.build.directory}/generated-sources/jaxws/wsimport</sourceDestDir>
<staleFile>${project.build.directory}/generated-sources/jaxws/wsimport/stale/.staleFlag</staleFile>
<wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
<sei/>
</configuration>
</plugin>