最近學弟學妹讓我幫忙在他們的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();
}
}
}
成爲菜鳥路上的笨鳥~