CXFを使って、header付きのsoapサービスを実現します.
2496 ワード
インターフェース部分には下記のコードが使われています.
実装部分コード
リターンの出力は、headerの部分を持っています.
package ws.server;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebParam.Mode;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Holder;
import ws.bean.MyReq;
import ws.bean.MyResp;
@WebService(targetNamespace = "http://www.MyWs.com/schemas/")
public interface MyWs {
@WebMethod
@WebResult(name = "MyResp") MyResp
myMethod(
//header ,Mode.INOUT ( Holder )
@WebParam(name = "Tid", header = true, mode = Mode.INOUT) Holder<String> tid,
@WebParam(name = "MyReq") MyReq myReq
);
}
実装部分コード
package ws.server.impl;
import javax.xml.ws.Holder;
import ws.bean.MyReq;
import ws.bean.MyResp;
import ws.server.MyWs;
public class MyWsImpl implements MyWs {
@Override
public MyResp myMethod(Holder<String> tid, MyReq myReq) {
// value Holder
System.out.println("tid = " + tid.value);
return new MyResp();
}
}
ソフトウェアUIを使うと入力が見られます.<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://www.MyWs.com/schemas/">
<soapenv:Header>
<sch:Tid>2222</sch:Tid>
</soapenv:Header>
<soapenv:Body>
<sch:myMethod>
<MyReq>
<reqName>3333</reqName>
</MyReq>
</sch:myMethod>
</soapenv:Body>
</soapenv:Envelope>
リターンの出力は、headerの部分を持っています.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<ns2:Tid xmlns:ns2="http://www.MyWs.com/schemas/">2222</ns2:Tid>
</soap:Header>
<soap:Body>
<ns2:myMethodResponse xmlns:ns2="http://www.MyWs.com/schemas/">
<MyResp>
<respName>javax.xml.ws.Holder@1733fe5d,3333</respName>
</MyResp>
</ns2:myMethodResponse>
</soap:Body>
</soap:Envelope>