ターゲットwsdl/xsdsが特定のパスの下に置かれている場合、wsimportコマンドとxjcコマンド(どちらもJava JDKの一部としてダウンロード)は、指定されたjaxbバインディングファイルを無視します。xjc/wsimport - JAXBバインディングが無視される
この現象を再現するには、パスC:\ aを使用できます。
nm.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="name.xsd"/>
<xs:annotation>
<xs:documentation xml:lang="en">Annotation</xs:documentation>
</xs:annotation>
<xs:element name="name" type="Name"/>
<xs:complexType name="FName">
<xs:sequence>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LName">
<xs:sequence>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
name.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Name">
<xs:sequence>
<xs:element name="FirstName" type="FName"/>
<xs:element name="LastName" type="LName"/>
<xs:element name="Date" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
bindings.xjb:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="1.0" xmlns:jxb="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">
<jxb:globalBindings generateElementProperty="false" collectionType="indexed">
<jxb:javaType name="java.util.Date" xmlType="xs:date" parseMethod="com.company.Converter.parseDate" printMethod="com.company.Converter.printDate"/>
</jxb:globalBindings>
</jxb:bindings>
このディレクトリには、次のXSDファイルが含まれています10
次のコマンドがCから使用されている:JAXBアーティファクトを生成する\:
xjc -b bindings.xjb nm.xsd
結合は無視されています。生成されたクラスはjava.util.Dateではなくxs:dateを使用し、アダプタクラスは生成されません。 XSDをインポートするwsdlでwsimportを使用すると、問題も再現可能です。
からdの名前を変更すると、バインディングが期待通りに機能しています。いくつかのパスは動作し、他のパスは動作しません。これはランダムであると思われ、パターンは特定されなかった。動作は、指定されたパスに対して一貫しています。 これは、Windows 10、Windows 7およびUnixマシンで再現されました。使用されたJavaのバージョンは1.7.0_79でした。バインディングファイルの名前は効果がないようですが、XSDファイルの名前は影響します。
この問題の原因となる可能性があり、これをどのように修正できますか?なぜパスはバインディングに影響しますか?パスが変更されてもバインディングが無視されないようにしながら、この問題を回避するための回避策はありますか?
私はあなたの問題を再現することはできません。まず、bindings.xjbファイルに何か問題があるようです。の終了タグがありません。それで、解析と印刷のための同じメソッドを持つことは奇妙です(Converterはprint.MethodとしてConverter.printを使用します)。使用したJDK7のマイナーバージョンとwsimportコマンドを呼び出したディレクトリの詳細をいくつか教えてください。そして、あなたはwsimportと呼ばれるディレクトリに 'tree/f'の出力とwsimportコマンドの出力を表示してください。ありがとう! –
boskoop
こんにちはboskoop、あなたの返信ありがとうございます。グローバルバインディングタグとprintMethod(問題には影響していなかった)を修正しました。私はjdk1.7.0_79を使用しています。機密情報を開示していないディレクトリに問題を再現し、質問を更新しようとします。 –
サンプルwsdlsとxsdsを使って再現しようとしています –