2009-06-16 4 views
0

私は従来のWebサービスで作業しており、WSDLを提供してくれました。Webサービスがすべての要求と応答の種類を文字列として指定するのはなぜですか?

ここで私の問題は、すべての関数は同じ引数と戻り値の型を指定しています。そして、このタイプは文字列として指定されます!

例:

<definitions targetNamespace="java:the.custom.namespace" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="java:the.custom.namespace" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> 
<types> 
    <schema targetNamespace="java:the.custom.namespace" xmlns="http://www.w3.org/1999/XMLSchema" /> 
    </types> 
    <message name="LegacySystemRequest"> 
    <part name="arg0" type="xsd:string" /> 
    </message> 
    <message name="LegacySystemResponse"> 
    <part name="return" type="xsd:string" /> 
    </message> 
    <portType name="LegacySystemPortType"> 
    <operation name="HelloWorld"> 
    <input message="tns:LegacySystemRequest" /> 
    <output message="tns:LegacySystemResponse" /> 
    </operation> 
</types> 

私はJavaでWebサービスを作成するに精通していないですが、彼らは彼らのDTOの構造を露出していないので、彼らは間違ってやっている可能性が明らかなものはありますか?私はそれらが複雑であることを例から知っているので、私はそれらをすべて自分のコードにハードコードするよう書いたくありません。私は彼らに与えることができる技術的なヒントはありますか?

答えて

1

より複雑な型を使用するときに文字列を使用する理由は、多くの場合2つあります。
1)SOAPサーバーを作成した人はよくわからず、複雑な型を使用するのはあまりにも経験がありません。
2)このWebサービスを呼び出すアプリケーションの中には、文字列よりも複雑なデータ型を処理できないものがあります。

あなたが言ったように、それはレガシーサービスなので、それを作成した人は複雑さを増すためにあまりにも経験の浅いSOAPでした。 2003年にSOAP標準が最終的だったことを考えると、同様のシンプルさで古いサービスを見つけることは驚くことではありません。当時はまったく新しいものでした。

多くの人が知識を身につける前に、多くの人がそれを使い始めているので、これは新技術にとって珍しいことではありません。彼らに経験があれば、その技術はもう時代遅れになっています。

あなたは改善方法についていくつかのヒントを提供することができますが、彼らのサービスはあまり良くないと知っていると思います。彼らはそれを改善するための資源を持っていないかもしれません。あるいは、すでにこのサービスを改善しているかもしれませんが、新しいサービスはまだベータ版であるかもしれません。

0

このWSDLから確かに言うことは不可能ですが、私はWebサービスが任意のデータの通信事業者に過ぎず、おそらくレガシーシステムに固執していたと思います。

文字列は何でもかまいませんが、おそらくそれ自体がXMLであるか、おそらくはCSVデータなどです。確かにWSDL設計の良い例ではありません。それは、現代のJavaと互換性がありませんRPCエンコードのWebサービスからかもしれないよう

あなたはそれを呼び出すと、あなたが戻って得るかを確認する必要がありますが....

また、このWSDLに見えますWSスタックは、ドキュメントのエンコーディングを必要とします。しかし、古いスタック(Axis 1など)はそれをサポートしています。

+0

私が受け取ったドキュメントごとに、文字列の引数は実際には非常に構造化されたXML形式ですが、この形式は関数ごとに異なるという問題があります。 – mbp

+0

ええ、それはラッパーのWebサービスであり、それはあまり考えられていません。返されたXMLを別々に解析するだけで済みます。 – skaffman

0

SOAPスキーマには他の種類のデータが用意されているため、技術的な理由で文字列を使用することはできませんが、XML転送によってすべてのパラメータが文字列として送信されます。

あなたの例で、彼らはそれらのパラメータをカプセル化するために、複雑なデータ型を作成するために悩まないでいるように見え、単に「リクエスト文字列」と「応答文字列」としてそれを残してきた...

をそれは本当に何であるかによって決まりますそれらの文字列で送信され、天気かどうかはより雄弁に表現することができます。私にとって、このような状況は、通常、怠惰から来ています。

Javaには、クラスをSOAPタイプにマップするためのスキーマを自動的に生成するツールが用意されています。私はIDEにアクセスしたので、手動で行うのは慣れていませんが、wsimportの場合はgoogleを使ってください。

関連する問題