4

Delphi Web サービス、具体的には soapenc:Array で複雑な型を作成するにはどうすればよいですか。それを使用する型定義と同じネームスペース内で使用できます。現在、Delphi アプリから生成された wsdl から Java で新しい Web サービスを作成しようとすると、Java で次のエラーが発生します。

Error resolving component 'soapenc:Array'. It was detected that 'soapenc:Array' is in namespace 'http://schemas.xmlsoap.org/soap/encoding/', but components from this namespace are not referenceable from schema document...........

wsdl を分析すると、すべてのメソッドと型で namepsace 'targetNamespace="urn:WebserviceIntf"' が使用されますが、soapenc:Array を使用する型は次のように定義されます。

<xs:complexType name="ArrayOfClientDetailAcc">
<xs:complexContent>
<xs:restriction base="soapenc:Array">
<xs:sequence/>
<xs:attribute xmlns:n1="http://schemas.xmlsoap.org/wsdl/" ref="soapenc:arrayType" n1:arrayType="ns2:TClientDetailAccArray[]"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>

これを変更できない場合は、インターフェイスをまったく変更せずに Java で Delphi Web サービスを複製する最善の方法についてアドバイスをいただければ幸いです。これにより、接続しているクライアントが混乱する可能性があります。

あなたの助けに感謝します!

提案されたリンクに従ってAxisを使用してみましたが、エラーも発生します:

C:\axis>java org.apache.axis.wsdl.WSDL2Java http://mywebservice?wsdl
- Unable to find required classes (javax.activation.DataHandler and javax.mail.i
nternet.MimeMultipart). Attachment support is disabled.
WSDLException (at /definitions/binding/operation[1]/input): faultCode=INVALID_WS
DL: Element '{http://schemas.xmlsoap.org/wsdl/}input' contained unexpected attri
butes: 'message':
        at com.ibm.wsdl.util.xml.DOMUtils.throwWSDLException(Unknown Source)
        at com.ibm.wsdl.xml.WSDLReaderImpl.parseBindingInput(Unknown Source)
        at com.ibm.wsdl.xml.WSDLReaderImpl.parseBindingOperation(Unknown Source)

        at com.ibm.wsdl.xml.WSDLReaderImpl.parseBinding(Unknown Source)
        at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(Unknown Source)
        at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
        at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
        at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
        at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.jav
a:516)
        at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.jav
a:495)
        at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:361)
        at java.lang.Thread.run(Unknown Source)
4

2 に答える 2

0

申し訳ありませんが、コメント("Netbeansでは"WSDLからの新しいWebサービス""を使用)に基づいて、JavaWebサービスクライアントではなくWebサービスサーバーを作成することは明らかです。ですから、もちろん私の答えは役に立ちません。


参照:Delphi SOAPサーバー-ドキュメント/リテラル​​-可能ですか?

この問題を解決するための1つの解決策は次のとおりです。

  • C#(WCF)またはJava(JAX-WS)を使用して新しいWebサービスサーバーを実装する

その後

  • 既存のDelphiアプリとWebサービスの間にシンプルなメッセージングレイヤーを構築する

また

  • Free Pascal WebServiceToolkitを使用する

ただし、どちらの方法でも、新しいサービスは古いDelphiクライアントと互換性がなくなります。

于 2012-10-15T11:06:31.627 に答える
0

maven でも同じaxistools:1.4です。この例外は、古いwsdl4j<= 1.5.3 によってスローされます。少なくともアップグレードする1.6.1か、新しい netbeans を待ちます。

于 2016-04-14T11:22:37.843 に答える