webService總結(一)——使用CXF釋出和呼叫webService(不使用Spring)
阿新 • • 發佈:2019-01-05
CXF和Axis2是兩個比較流行的webService框架,接下來我會寫幾篇部落格簡單介紹如何使用這兩種框架。首先,先簡單介紹一下CXF的使用。
CXF釋出webService有多種方法,這裡我介紹三種:
1、不使用Spring,CXF自動釋出webService
2、不使用Spring,CXF手動釋出webService
3、使用Spring + CXF釋出webService
這篇部落格以例項介紹第一種方法——不使用Spring,CXF自動釋出webService。
服務端:
目錄結構如下:
IHelloWorldServer程式碼:
<span style="font-family:Microsoft YaHei;font-size:18px;">package com.test.server; public interface IHelloWorldServer { public String sayHello(String username); }</span>
HelloWorldServerImp程式碼:
<span style="font-family:Microsoft YaHei;font-size:18px;">package com.test.server;
public class HelloWorldServerImp implements IHelloWorldServer {
@Override
public String sayHello(String username) {
return username+" : HelloWorld";
}
}</span>
這兩個是最最簡單的java類。
WebServlet程式碼:
這個Servlet用於釋出webService,當程式部署後,容器會自動呼叫這裡面的方法。<span style="font-family:Microsoft YaHei;font-size:18px;">package com.test.server; import javax.servlet.ServletConfig; import org.apache.cxf.Bus; import org.apache.cxf.BusFactory; import org.apache.cxf.frontend.ServerFactoryBean; import org.apache.cxf.transport.servlet.CXFNonSpringServlet; public class WebServlet extends CXFNonSpringServlet { // private static final String SERVICE_SUFFIX = ""; private static final long serialVersionUID = 1L; @Override protected void loadBus(ServletConfig servletConfig) { super.loadBus(servletConfig); Bus bus = getBus(); BusFactory.setDefaultBus(bus); HelloWorldServerImp helloWorld = new HelloWorldServerImp();//實現類 ServerFactoryBean serverFactoryBean = new ServerFactoryBean(); //server工廠 serverFactoryBean.setServiceClass(IHelloWorldServer.class);// 介面類 serverFactoryBean.setAddress("/helloWorld"); //服務請求路徑 serverFactoryBean.setServiceBean(helloWorld); serverFactoryBean.create(); } }</span>
Web.xml檔案
<span style="font-family:Microsoft YaHei;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>cxf_demo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<display-name>cxf_demo</display-name>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>com.test.server.WebServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
</web-app></span>
將上述專案釋出到Tomcat中,他會自動釋出webService,輸入網址:http://localhost:8080/cxf_demo_noSpring_1/ws,即可看到釋出好的webService,輸入網址:http://localhost:8080/cxf_demo_noSpring_1/ws/helloWorld?wsdl,檢視wsdl檔案,能正常顯示,說明webService釋出成功。
客戶端:
HelloWorldClient程式碼:
<span style="font-family:Microsoft YaHei;font-size:18px;">package com.test.client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
public class HelloWorldClient {
public static void main(String[] args) {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
org.apache.cxf.endpoint.Client client = dcf.createClient("http://localhost:8080/cxf_demo_noSpring_1/ws/helloWorld?wsdl");
Object[] objects;
try {
objects = client.invoke("sayHello", "haitao");
//輸出呼叫結果
System.out.println(objects[0].toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
</span>
run之後,結果如下:
至此,第一種方式介紹完畢,接下來的部落格我會繼續介紹其他方法。