Java Web サービス クライアントを作成しようとしています。String を受け取り、別の String を返す非常に単純なサービスです。私はsoapUIでサービスをテストしており、完全に動作しますが、Javaでコーディングしようとすると失敗します。
サービスを呼び出すために使用しているコードは次のとおりです
QName QNAME_TYPE_STRING = new QName(nameSpaceURI,"string");
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(new QName(nameSpaceURI, webServiceMethod));
call.addParameter("buil:arg0", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(QNAME_TYPE_STRING, String.class);
String ret = (String) call.invoke(new Object[]{"PARAMETER VALUE"});
endPoint
変数がサービスの URL を正しく指している。
nameSpaceURI = "http://build.response.service/";
webServiceMethod = "buildResponse";
問題は、webService がパラメーターを正しく取得することですが、応答で何かが発生することです。
Caused by: com.ctc.wstx.exc.WstxParsingException: Non-default namespace can not map to
empty URI (as per Namespace 1.0 # 2) in XML 1.0 documents
at javax.xml.stream.SerializableLocation@6fee8ce6
これは、soapUI での私のリクエストのサンプルです
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:buil="http://build.response.service/">
<soapenv:Header/>
<soapenv:Body>
<buil:buildResponse>
<buil:arg0>PARAMETER VALUE</buil:arg0>
</buil:buildResponse>
</soapenv:Body>
</soapenv:Envelope>
そして、これはsoapUIの応答のサンプルです
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:buildResponse xmlns:ns1="http://build.response.service/">
<return xmlns="http://build.response.service/">
RESPONSE1,RESPONSE2,RESPONSE3
</return>
</ns1:buildResponse>
</soap:Body>
</soap:Envelope>
¿アイデア? これは応答と関係があると思いますが、私は本当にwebServicesの初心者です(知っている...知っている... 21世紀...)。
追加情報: wsdl2java を使用することも、サービスの wsdl を公開することも許可されていません (とにかく自動生成されます。私はそれとは何の関係もありませんし、変更されることもありません)。申し訳ありませんが、この制限にもかかわらず、私を助けてくれることを願っています。
ありがとう!