0

Web サービスに使用するスキーマがワークスペースにあるものと一致しないという奇妙な問題に遭遇しました。私のワークスペースでは、要素には次の定義があります。

            <xsd:element name="checkFooBars" minOccurs="1" nillable="false">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:enumeration value="Y"/>
                        <xsd:enumeration value="N"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:element>

アプリケーションから (この URL: 経由で) アクセスできるスキーマ内の同じ要素は、次のwww.myapplication.com/MyApplicationHttpRouter/MyService/MyService_schema1.xsdようになります。

<xs:element name="checkFooBars" type="xs:string" /> 

これは、サービスのユーザーがオンライン スキーマを見て、私が要素に課した制限を認識しないという問題を引き起こしています。

ここで何が起こっているのか、またはその理由を知っている人はいますか?

4

1 に答える 1

0

欠けていたのは、WSDL から Java Bean スケルトンを生成するときに WSDL ファイルをコピーすることでした。「WSDL をプロジェクトにコピー」というチェックボックスがあります。チェックボックスを設定してから、Java コードを再生成しました。WSDL は EJB プロジェクトの META-INF にコピーされ、サービス実装では、MyServiceSOAPImpl.java の@WebService注釈の wsdlLocation 属性が に設定されていましたMETA-INF/myService.WSDL。フォルダーのレイアウトが気に入らなかったので、変更しましたMETA-INF/wsdl/MyService/myService.WSDL(そして、MyServiceSOAPImpl.java の Java 参照を更新しました) - RAD 7 では宛先ディレクトリを指定する方法がないことに気付きましたが、RAD 8.5 では指定できます。

WSDL が提供されていない場合、ランタイムはオンザフライで WSDL を生成するようです。生成されたコードにはコメントに制限がありましたが、コードに実装されていませんでした。そのため、実行時に生成された WSDL とスキーマには、制限のない単純な文字列として要素が含まれていたと思います。これは、正しくないように見える Java に基づいていたためです。 (しかし、これは既知の問題でしょうか?)。

于 2013-04-08T20:54:27.950 に答える