2

まず、私がやりたいことは次のとおりです。SOAPvoid doSomething(ParamType value);メッセージを受信したときにJava関数を呼び出すWebサービスを作成したい

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
        <paramType>
            <elem>test</elem>
        </paramType>
    </soapenv:Body>
</soapenv:Envelope>

paramTypeの名前空間が欠落していることに注意してください。

doSomething関数を含む次のクラスを作成しました。

@WebService(name = "doSomethingPort", targetNamespace = "http://www.tim.org/nsClass/")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class DoSomethingImpl {

    @WebMethod(action = "http://sap.com/xi/WebService/soap1.1")
    @Oneway
    public void doSomething(
            @WebParam(name = "paramType", targetNamespace = "http://www.tim.org/nsParam/", partName = "value") 
            ParamType value) 
    {
        System.out.println("Hallo Welt");
    }
}

およびパラメータを保持する次のクラス:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", namespace="http://www.tim.org/nsXMLType/")
@XmlRootElement(name="paramType", namespace="http://www.tim.org/nsXMLRootElem/")
public class ParamType {

    @XmlElement(required = true)
    protected String elem;

    public String getElem() {
        return elem;
    }

    public void setElem(String value) {
        this.elem = value;
    }
}

Webサービスは次のコマンドで開始されます。

Endpoint.publish( "http://localhost:8090/services", new DoSomethingImpl());

いくつかのテスト後の結果は次のとおりです。このWebサービスは、paramTypeに名前空間があるメッセージを受け入れます。<nsp:paramType xmlns:nsp="http://www.tim.org/nsParam/">

パラメータにtargetNamepace宣言を残すと、彼はDoSomethingImplクラス(http://www.tim.org/nsClass/)のtargetNamespaceを使用します。

そこで名前空間を削除すると、Webサービスはパッケージ名から名前空間を作成します。

そのメッセージを受け入れるWebサービスを取得する方法について誰かが考えていますか?既存のWebサービスを修復/再構成したいのですが、メッセージを受け入れてdoSomething関数を呼び出す他の方法を受け入れます。

4

0 に答える 0