SOAP ベースの Web サービスと通信するプロジェクトを継承しました。私はこれに完全に慣れていませんが、長年 Java を使用しており、XML
.
サービス用のWSDL
ファイルがあり、上部にスキーマがあり、その下にすべてのメッセージ定義が含まれています。問題の核心にあるのは、コードを介してサービスに接続しようとすると、アノテーションが欠落しているため、要素として型「 https.api_blah_com.services.v4.Product@XmlRootElement
」をマーシャリングできないという恐ろしいメッセージが表示されることです]
私のプロジェクトにはすでに jaxws バインディング ファイルがあります。
<jaxws:bindings wsdlLocation="../resources/wsdl/BlahAPI.wsdl"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
<jaxws:bindings
node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='https:api.blah.com/services/v4']">
<jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xjc:generateElementProperty>true</xjc:generateElementProperty>
</jxb:globalBindings>`
</jaxws:bindings>
</jaxws:bindings>
で生成されたすべての Java クラスを取得するには、有効にするシンプル モード@XmlRootElement
を追加する必要があることを読みました。jaxb:globalBinding
これのローカルコピーに追加しようとしましたWSDL
:
<xs:annotation>
<xs:appinfo>
<jaxb:globalBindings>
<xjc:simple />
</jaxb:globalBindings>
</xs:appinfo>
</xs:annotation>
しかし、JAXB
コンパイラは、globalBindings のカスタマイズが間違った場所にアタッチされているか、他のバインディングと矛盾しているため、このカスタマイズを尊重できないと不平を言っています。
そこで、次のように、jaxb 用に別のバインディング ファイルを追加してみました。
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="1.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jaxb:bindings schemaLocation="../resources/wsdl/blah.wsdl">
<jaxb:globalBindings>
<xjc:simple />
</jaxb:globalBindings>
</jaxb:bindings>
</jaxb:bindings>
しかし、blah.wsdl がこのコンパイルの一部ではないというエラーが表示されます。
このサービスを利用する日が近づいています... この 1 つのことを乗り越えることができず、すべてが初めてなので、他に何を試せばよいかわかりません。
WSDL
それらをXSD
とWSDL
?に分割できます。これを機能させるために必要ですか?