まず、私がやりたいことは次のとおりです。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関数を呼び出す他の方法を受け入れます。