2016-05-27 12 views
0

既存のサードパーティの.NET Webサービスに基づいてJava Webサービスを作成しました。この私のWebサービス・インターフェースである:私は正常にこのようにするJava WebサービスクライアントからのSOAPメッセージを受信Java Webサービス:null要求パラメータ

package externalqueryadapter.service._01.responsereceiver; 

import javax.jws.WebMethod; 
import javax.jws.WebParam; 
import javax.jws.WebService; 
import javax.xml.bind.annotation.XmlSeeAlso; 
import javax.xml.ws.Action; 
import javax.xml.ws.RequestWrapper; 
import javax.xml.ws.ResponseWrapper; 
import org.datacontract.schemas._2004._07.commonservices_externalqueryadapter.ExternalResponse; 

@WebService(name = "ResponseReceiver", targetNamespace = "http://Service.ExternalQueryAdapter/01/ResponseReceiver") 
@XmlSeeAlso({ 
    externalqueryadapter.service._01.responsereceiver.ObjectFactory.class, 
    org.datacontract.schemas._2004._07.commonservices_externalqueryadapter_contract.ObjectFactory.class 
}) 
public interface ResponseReceiver { 

    @WebMethod(operationName = "ReceiveResponse") 
    @RequestWrapper(localName = "ReceiveResponse", targetNamespace = "http://Service.ExternalQueryAdapter/01/ResponseReceiver", className = "externalqueryadapter.service._01.responsereceiver.ReceiveResponse") 
    @ResponseWrapper(localName = "ReceiveResponseResponse", targetNamespace = "http://Service.ExternalQueryAdapter/01/ResponseReceiver", className = "externalqueryadapter.service._01.responsereceiver.ReceiveResponseResponse") 
    @Action(input = "http://Service.ExternalQueryAdapter/01/ResponseReceiver/ResponseReceiver/ReceiveResponseRequest", output = "http://Service.ExternalQueryAdapter/01/ResponseReceiver/ResponseReceiver/ReceiveResponseResponse") 
    public void receiveResponse(
     @WebParam(name = "response", targetNamespace = "http://schemas.datacontract.org/2004/07/CommonServices.ExternalQueryAdapter.Contract") 
     ExternalResponse response); 
} 

そして、私のExternalResponseクラス

package org.datacontract.schemas._2004._07.commonservices_externalqueryadapter_contract; 

import java.util.ArrayList; 
import java.util.List; 
import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlSchemaType; 
import javax.xml.bind.annotation.XmlType; 
import javax.xml.datatype.XMLGregorianCalendar; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "externalResponse", propOrder = { 
    "requestTime", 
    "userID" 
}) 
public class ExternalResponse { 

    @XmlSchemaType(name = "dateTime") 
    protected XMLGregorianCalendar requestTime; 
    protected String userID; 

    public XMLGregorianCalendar getRequestTime() { 
     return requestTime; 
    } 

    public void setRequestTime(XMLGregorianCalendar value) { 
     this.requestTime = value; 
    } 

    public String getUserID() { 
     return userID; 
    } 

    public void setUserID(String value) { 
     this.userID = value; 
    } 
} 

<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> 
     <ReceiveResponse 
      xmlns="http://Service.ExternalQueryAdapter/01/ResponseReceiver"> 
      <response 
       xmlns=""> 
       <RequestTime>2013-01-30T20:00:00.000Z</RequestTime> 
       <userID>olololo</userID> 
      </response> 
     </ReceiveResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

しかし、SOAPメッセージの場合応答パラメータの名前空間を含んでいます(サードパーティのWebServiceクライアントからのメッセージです(私は.NETクライアントだと思います))Java WebServiceはnullを受け取ります回答はExternalResponseです。

<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> 
     <ReceiveResponse 
      xmlns="http://Service.ExternalQueryAdapter/01/ResponseReceiver"> 
      <response 
       xmlns="http://schemas.datacontract.org/2004/07/CommonServices.ExternalQueryAdapter.Contract"> 
       <RequestTime>2013-01-30T20:00:00.000Z</RequestTime> 
       <userID>olololo</userID> 
      </response> 
     </ReceiveResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

package-info.java:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://schemas.datacontract.org/2004/07/CommonServices.ExternalQueryAdapter.Contract", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package org.datacontract.schemas._2004._07.CommonServices_ExternalQueryAdapter_Contract; 

私のJava Webサービスで間違っていますか?

答えて

1

パッケージ情報番号をアーカイブに含められませんでしたか?

JAX-WS @WebParamに合致しないケース(TNSを含む)があるため、elementFormDefault = "qualified"(通常はpackage-info.javaで見ることができます)のJAXBを生成したのでしょうか? elementFormDefaultを未修飾にデフォルト設定する可能性がある

これは、WSDL/WSおよびJAXB注釈付きクラス。 wsimport

+0

質問するpackage-info.javaを追加しました。いいえ、package-info.classは私の戦争アーカイブに含まれています。私はサードパーティのWebService WSDL/XSDにアクセスしていないので、WSDL/XSDスキーマからクラスを生成しませんでした。 NetBeans - > New - > WebServiceを介してWebサービスを作成し、ExternalResponseクラスを手動で追加しました –

+0

WSDL/XSDを投稿する可能性がありますか?私は個人的には助けることができますが、他の誰かが助けることができるかどうかはわかりません。 –

関連する問題