1.在web.xml文件中加入这段代码:
<!-- webservice服务配置 -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/xinbo_hip/bm_Services/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dorado-home/webService.xml</param-value>
</context-param>
<!-- webservice服务配置 -->
2.maven的pom文件中加入:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.5.1</version>
<exclusions>
<exclusion>
<artifactId>jaxb-impl</artifactId>
<groupId>com.sun.xml.bind</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>2.1</version>
</dependency>
3.配置文件中webService.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<bean id="dataWebServiceProvider" class="com.xinbo.ws.Impl.DataWebServiceProviderImpl"/>
<bean id="inMessageInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
<bean id="outLoggingInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<!-- 注意下面的address,这里的address的名称就是访问的WebService的name -->
<jaxws:server id="iDataWebServiceProvider" serviceClass="com.xinbo.ws.IDataWebServiceProvider" address="/wsDataServiceProvider">
<jaxws:serviceBean>
<ref bean="dataWebServiceProvider"/>
</jaxws:serviceBean>
<jaxws:inInterceptors>
<ref bean="inMessageInterceptor"/>
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<ref bean="outLoggingInterceptor"/>
</jaxws:outInterceptors>
</jaxws:server>
</beans>
jaxws:server 个人理解就是在配置文件中实例化一个JaxWsServerFactoryBean对象。这个类是发布服务的作用。上面的配置意思相当于:
public static void main(String[] args) {
JaxWsServerFactoryBean jsfb = new JaxWsServerFactoryBean();
//1.服务提供者实现的接口
jsfb.setServiceClass(IDataWebServiceProvider.class);
//2.指定访问路径
jsfb.setAddress("http://localhost:8083/xinbo_hip/bm_Services/wsDataServiceProvider");
//3.指定服务实现类
jsfb.setServiceBean(new DataWebServiceProviderImpl());
jsfb.getInInterceptors().add(new LoggingInInterceptor());
jsfb.getOutInterceptors().add(new LoggingOutInterceptor());
//4.发布
jsfb.create();
System.out.println("发布成功...");
}
4.load-on-startup什么意思?
- load-on-startup 元素标记容器是否应该在web应用程序启动的时候就加载这个servlet,(实例化并调用其init()方法)。
- 它的值必须是一个整数,表示servlet被加载的先后顺序。
- 如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。
- 如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。
5.@WebParam(name="request")作用?
接口在被编译为class文件的时候不能保存参数名 ,所以需要这个标签保留名字,自己在开发中吃过这个亏,记录一下,不要再犯了。所以如果没有加注解,参数将被命名为arg0。
6.webservice接口
@WebService(targetNamespace="http://ws.xinbo.com/",name = "dataWebServiceProvider", serviceName = "DataWebServiceProvider")
public interface IDataWebServiceProvider {
@WebResult(name="return",targetNamespace="http://ws.xinbo.com/")
@WebMethod
public String refund(@WebParam(name="request") String request);
@WebMethod
public String getMedicationRecord(@WebParam(name="request") String request);
@WebMethod
public String sendWxMsg(@WebParam String code, @WebParam String paramJson);
}
7.webservice实现类
@Component
public class DataWebServiceProviderImpl implements IDataWebServiceProvider{
/**
* 发送消息
*/
@Override
public String getMedicationRecord(String request) {
String result="调用失败";
MobileSyshealthOrgInfo mobileSyshealthOrgInfo=systemService.getMbInfo("400686566");
if(mobileSyshealthOrgInfo!=null) {
RequestBean requestBean=new RequestBean();
requestBean.setAddress(mobileSyshealthOrgInfo.getWsurl());
requestBean.setId("getMedicationRecord");
requestBean.setXml(request);
ResponseBean responseBean = SendConnect.sendXmlMethod(requestBean);
result=responseBean.getResult();
}
return result;
}
@Override
public String sendWxMsg(String code, String paramJson) {
Gson gson = new Gson();
Map<String, Object> map = null;
try{
map = gson.fromJson(paramJson, new TypeToken<Map<String, Object>>() {}.getType());
}catch(Exception e){
return "参数解析失败";
}
String content = StringUtil.parseString(map.get("content"));
String Id_No = StringUtil.parseString(map.get("Id_No"));
TPatientUser user = mobileDbService.getTPatientUserByParams(null,null,Id_No,null);
if(user==null){
return "根据身份证号查无此人";
}
WxMpKefuMessage message=new WxMpKefuMessage();
message.setMsgType(WxConsts.KefuMsgType.TEXT);
message.setContent(content);
message.setToUser(user.getWxId());
wxMpService.setWxMpConfigStorage(WeiXinMpInit.defaultStorage);
try {
wxMpService.getKefuService().sendKefuMessage(message);
} catch (WxErrorException e) {
return "微信错误代码:"+e.getError().getErrorCode()+";微信错误描述:"+e.getError().getErrorMsg();
}
return "发送成功";
}
}
8.用soupUI测试接口。
在摸索中前进。。。。。