最近学弟学妹让我帮忙在他们的S2SH项目中添加远程调用接口,我使用CXF添加WebService,提高远程接口。
主要有以下个步骤:
步骤一:下载jar包:
geronimo-annotation_1.0_spec-1.1.1.jar
geronimo-jaxws_2.2_spec-1.0.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
geronimo-ws-metadata_2.0_spec-1.1.3.jar
jaxb-api-2.2.1.jar
jaxb-impl-2.2.1.1.jar
neethi-2.0.4.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.7.jar
wstx-asl-3.2.9.jar
这些jar直接去apach官网下载cxf的压缩包,都能够下载。
步骤二:配置Web.xml
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/webServices/*</url-pattern>
</servlet-mapping>
其中 /WebService/* 是接口的访问地址格式。
步骤三:Spring容器的配置
在spring的配置上添加上图所标注的。
步骤四: 开始写接口:
注意标志的位置。
步骤五: 接口写完。最后需要在spring的配置文件上注册接口,让spring管理。
到这里为止,已经接口已经写完。启动项目,然后在浏览器地址输入
通过地址栏 查看接口是否暴露。
到这里为止S2SH项目使用CXF配置WebService 已经完成。
最后配上使用AXIS调用webService接口demo。同样AXIS的jar可以在apach的官网下载。
package Test.Test;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Service;
import com.alibaba.fastjson.JSON;
import Test.domain.User;
public class TestClient {
public static void main(String[] args) {
//指出service的URL
String endpoint="http://localhost:8080/Struts2.3.16.1Hibernate4.3.4Spring4.0.2/webServices/LoginService";
//映射 固定不变
String nameSpace="http://webservice.internsystem.sise.com/";
//创建一个Service 用户调用CALL方法
Service service=new Service();
try {
Call call=service.createCall();
call.setTargetEndpointAddress(endpoint);
//调用的接口名称 Login
call.setOperationName(new QName(nameSpace,"Login"));
//调用接口 传递的参数
call.addParameter("UserJson", org.apache.axis.Constants.XSD_STRING, ParameterMode.IN);
// new 一个实体类
User user=new User();
user.setName("admin");
user.setPwd("123456");
user.setRole("admin");
//将对象转换为String类型字符串
String aa=JSON.toJSONString(user);
//调用接口返回的参数
String result=(String) call.invoke(new Object[]{aa});
User user2=new User();
user2=JSON.parseObject(result, User.class);
System.out.println(result);
// System.out.println(user2.toString());
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
成为菜鸟路上的笨鸟~