0

Jax-WS Spring サポートを使用して、Tomcat サーブレット コンテナーでコントラクト ファーストの JAX-WS Web サービスを正常に公開しています。私はxs:idrefタイプでトラブルを抱えています。元の XSD ファイルに複合型が含まれています

  <xs:complexType name="DocumentScopeOptionalTypeReferenceIdentifier">
    <xs:simpleContent>
      <xs:extension base="DocumentScopeReferenceIdentifierContent">
         ...
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="DocumentScopeReferenceIdentifierContent">
    <xs:restriction base="xs:IDREF">
      <xs:minLength value="1"/>
      <xs:maxLength value="64"/>
    </xs:restriction>
  </xs:simpleType>

どの xjc が正しくコンパイルされるか

public class DocumentScopeOptionalTypeReferenceIdentifier {

  @XmlValue
  @XmlIDREF
  protected Object value;

  ...
}

しかし、Web サービスをデプロイすると、@XmlIDREFアノテーションが無視されxs:anyType、結果の WSDL の in the namespace 宣言になってしまいます。

<xs:complexType name="DocumentScopeOptionalRoleReferenceIdentifier">
<xs:simpleContent>
<xs:extension base="xs:anyType">
...
</xs:extension>
</xs:simpleContent>
</xs:complexType>

問題の Web サービスのクライアントは、これを使用して (C# を使用して) クライアント スタブを生成できないと報告していanyTypeます。どうすれば元に戻すことができxs:idrefますか? ありがとう。

4

1 に答える 1

0

わかりました、私のアプローチは少し素朴すぎると思います。少し調べた結果、生成された WSDL をカスタマイズすることはできないという結論に達しました。ここでは、コントラクト ファーストのアプローチに切り替えて、手作りの WSDL ファイルを手動で指定します。

META-INF/wsdl の下にある WSDL ファイルは、対応するサービスとポート名が含まれている場合、JAX-WS によって自動的に取得される必要があることを読みました。これはうまくいかなかったため、注釈のwsdlLocation属性を使用して WSDL ファイルを明示的に指定する必要がありました。@WebService

@WebService(
   targetNamespace = "...", 
   serviceName = "...", 
   portName = "...", 
   wsdlLocation = "/META-INF/wsdl/mywebservice.wsdl"
)
public class MyWebService { ... }

Tomcat への Web サービスのデプロイは、 Jax-WS コミュニティ ページの指示に従って簡単にできました。

于 2012-04-23T14:58:06.710 に答える