0

私は wsdl を持っており、そこから apache cxf を使用してサーバー スタブを生成しました。問題は、私が展開する新しい wsdl が最初のものと異なるため、古いものに対する SOAP 要求が新しいものに対して機能しないことです。soapUI を使用してテストします。新しいものには、この奇妙な名前空間initがあります:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:init="http://initiator.clientprovisioning_1_0.mdm.smarttrust.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <init:cpDiscovery.Response>

古い SOAP メッセージには次のようなものはありませんでした:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <cpDiscovery.Response>

必要な追加情報を提供します。私はこれを2日間解決しようとしています。助けてください。

EDIT このinitプレフィックスは、Java パッケージの最初の文字に依存します。たとえば、クラスが me.mycompany.example プレフィックスにある場合:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:exam="http://example.mycompany.net/">
   <soapenv:Header/>
   <soapenv:Body>
      <exam:cpDiscovery.Response>

EDIT http://cxf.apache.org/docs/developing-a-service.html#DevelopingaService-AnnotatingtheCode これは述べています

targetNamespace プロパティ サービスが定義されているターゲット名前空間を指定します。このプロパティが指定されていない場合、ターゲット名前空間はパッケージ名から派生します。

どうすればこれを取り除くことができますか?

4

2 に答える 2

1

SOAP ペイロードを記述する XML スキーマに名前空間を導入しました。これは、クライアントがスキーマ ファイルにアクセスできる限り、サービスを呼び出すクライアントの機能に影響を与えるべきではありません。

于 2012-09-28T15:03:35.193 に答える
1

「古い」soap メッセージは実際には無効であり、機能することはなかったはずです。soap 仕様に従って、soap:Body の子は名前空間修飾されている必要があります。「新しい」動作が必要な動作のようです。

于 2012-09-28T15:47:43.160 に答える