2023年6月28日发(作者:)
一、 spring配置文件
在spring配置文件中加入如下配置
首先加入声明:
xmlns:jaxws=/jaxws
和
/jaxws /schemas/
位置如图所示
然后做webservice配置
resource="classpath:META-INF/cxf/" /> address="/ReceiveSignature" implementorClass="veSignatureService"> class="eSignatureServiceI mpl"> 图1 说明: 图2 如图2所示这三行是固定要引入的。 图3 如图3所示这个是webservice的配置,address是最后发布的webservice的url配置 implementorClass是webservice的接口类, 二、 配置 在中加入如下配置: et-class> 图4 其中 三、 接口类 package e; import hod; import am; import ult; import vice; import eSignatureResponse; @WebService(serviceName="ReceiveSignature") public interface IReceiveSignatureService { @WebMethod(operationName="ReceiveSignature") public @WebResult(name="receiveSignatureResult")ReceiveSignatureResponse receiveSignature( } @WebParam(name="SVC_USER_CODE")String svcUserCode, @WebParam(name="CHARGENO")String chargeNo, @WebParam(name="FORM_CONTENT")String formContent ); 图示: 图5 其中: @WebService(serviceName="ReceiveSignature")声明webservice名称。 @WebMethod(operationName="ReceiveSignature")声明要暴露出来的webservice方法。 @WebResult(name="receiveSignatureResult")声明返回的xml中的结果节点名称。 @WebParam(name="SVC_USER_CODE")声明方法参数(即与请求xml中的节点名对应) 四、 实现类 package e; import vice; import eSignatureResponse; import l; import ; import rService; import il; @WebService(endpointInterface="veSignatureService") public class ReceiveSignatureServiceImpl implements IReceiveSignatureService { public ReceiveSignatureResponse receiveSignature(String svcUserCode, String chargeNo, String formContent) { User user = ("sysadmin"); n(rId()); ReceiveSignatureResponse aaa = new ReceiveSignatureResponse(); rgeNo(chargeNo); mContent(formContent); UserCode(svcUserCode); n("**********************chargeNo: IDBUserService service = (IDBUserService) n(); "+chargeNo); } } n("**********************svcUserCode: n("**********************formContent: (chargeNo, formContent); return aaa; "+svcUserCode); "+formContent); 图示: 图6 其中红色部分为 IDBUserService service = (IDBUserService) n(); 这样就能在这里取到需要用的service实体,比如人员管理的service。 @WebService(endpointInterface="veSignatureService")该声明中必须指定接口类的包路径 五、 webservice方法返回的结果对象 package es; import essType; import essorType; import ment; import tElement; @XmlRootElement(name="receiveSignatureResult") @XmlAccessorType() public class ReceiveSignatureResponse { @XmlElement(name="SVC_USER_CODE") private String svcUserCode; @XmlElement(name="CHARGENO") private String chargeNo; @XmlElement(name="FORM_CONTENT") private String formContent; public String getSvcUserCode() { return svcUserCode; } public void setSvcUserCode(String svcUserCode) { rCode = svcUserCode; } public String getChargeNo() { return chargeNo; } public void setChargeNo(String chargeNo) { No = chargeNo; } public String getFormContent() { return formContent; } public void setFormContent(String formContent) { ntent = formContent; } } 图示: 图7 其中红色部分标注的 @XmlRootElement(name="receiveSignatureResult")声明了返回xml中的body节点下的第一个节点名称,跟调用ESB接口的时候编写的bean同理。 @XmlAccessorType()固定这么写 六、 请求报文与返回报文示例 Wsdl: localhost:8081/MobileAdapter/services/ReceiveSignature?wsdl 请求报文: xmlns:ser="/"> 图示: 图8 返回报文: 图示: 图9 因为例子中所写的三个请求参数在webservice方法中直接做了返回,固请求报文与返回报文基本相同,请根据实际情况。 七、 ESB请求报文头拦截示例 要拦截请求报文头,需要配置拦截器,拦截器配置如下: 在spring配置文件中加入 /bean> class="viceInterceptor">< 图示(在上面所述基础之上): 图10 文件源码: package eptor; import or; import ; import ssage; import ; import ; import ctPhaseInterceptor; import ; public class WebServiceInterceptor extends AbstractPhaseInterceptor { } } @Override public void handleFault(SoapMessage message) { } Fault(message); } Header header = (Header) (); n(aBinding()); n(ection()); n(e()); @Override public void handleMessage(SoapMessage msg) throws Fault { List for (Iterator iterator = or(); t();) public WebServiceInterceptor() { } //指定拦截器在哪个阶段触发 super(_INVOKE); 其中super(_INVOKE)指定了需要在什么时候触发拦截器,这里的配置指定请求到来的时候首先拦截请求,处理后再进入webservice的方法。 public void handleMessage(SoapMessage msg)方法是要实现的消息处理方法。 public void handleFault(SoapMessage message)方法是处理错误的。 图示: 图11 请求报文中加入头节点: xmlns:ser="/"> 图示: 图12 那么在收到请求的时候可以得到头信息: 图13 八、 请求参数为对象 方法定义为: package e; import hod; import am; import ult; import vice; import eSignatureRequest; import eSignatureResponse; @WebService(serviceName="ReceiveSignature") public interface IReceiveSignatureService { @WebMethod(operationName="ReceiveSignature") public @WebResult(name="receiveSignatureResult")ReceiveSignatureResponse receiveSignature( } 其中@WebParam(name="request")ReceiveSignatureRequest req 中的name="request"与请求报文中的节点对应,如图14: @WebParam(name="request")ReceiveSignatureRequest req ); 图14 请求对象定义为: package es; import essType; import essorType; import ment; import e; @XmlType(name="ReceiveSignatureRequest") @XmlAccessorType() public class ReceiveSignatureRequest { @XmlElement(name="SVC_USER_CODE") private String svcUserCode; } @XmlElement(name="CHARGENO") private String chargeNo; @XmlElement(name="FORM_CONTENT") private String formContent; public String getSvcUserCode() { } public void setSvcUserCode(String svcUserCode) { } public String getChargeNo() { } public void setChargeNo(String chargeNo) { } public String getFormContent() { } public void setFormContent(String formContent) { } ntent = formContent; return formContent; No = chargeNo; return chargeNo; rCode = svcUserCode; return svcUserCode; 其中@XmlType(name="ReceiveSignatureRequest") 必须写在最上面 九、 返回xml只有header的情况 方法定义中给返回值的声明加上如下属性: @WebService(serviceName="ReceiveSignature") public interface IReceiveSignatureService { @WebMethod(operationName="ReceiveSignature") public @WebResult(name="receiveSignatureResult",header=true)ReceiveSignatureResponse receiveSignature( @WebParam(name="request")ReceiveSignatureRequest req ); } 如图15所示: 图15 返回xml即如下:
发布者:admin,转转请注明出处:http://www.yc00.com/news/1687888235a54126.html
评论列表(0条)