在開發(fā)java webservice時(shí),有兩個(gè)比較流行的框架:axis2和cxf。cxf可以無(wú)縫的和spring集成,而axis2需要打包成aar文件,在tomcat下面跑。于是我們選擇了cxf開發(fā)webservice。
下面一步步的介紹用cxf開發(fā)服務(wù)端和客戶端的例子。
首先開發(fā)服務(wù)端:
一:在pom.xml文件中加入依賴:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-api</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-bindings-soap</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-security</artifactId>
<version>2.5.0</version>
</dependency>
然后會(huì)在maven dependencies文件夾中看到引用的jar包
二:開發(fā)服務(wù)的接口類和實(shí)現(xiàn)類
首先接口類:
package com.mycompany.webservice.server;
import javax.jws.WebService;
@WebService
public interface Greeting {
public String greeting(String userName);
}
然后實(shí)現(xiàn)類:
package com.mycompany.webservice.server;
import java.util.Calendar;
import javax.jws.WebService;
@WebService(endpointInterface = "com.mycompany.webservice.server.Greeting")
public class GreetingServiceImpl implements Greeting {
public String greeting(String userName) {
return "Hello " + userName + ", currentTime is "
+ Calendar.getInstance().getTime();
}
}
服務(wù)端的代碼開發(fā)就到此了。下面要配置文件。
在application.xml中:
添加
<!--=============== 實(shí)現(xiàn)類的bean,需要spring注入 ============================-->
<bean id="greetingServiceImpl" class="com.mycompany.webservice.server.GreetingServiceImpl"/>
<jaxws:endpoint id="greetingService" implementor="#greetingServiceImpl" address="/Greeting" />
在web.xml中:
添加
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<!--==這個(gè)設(shè)置很重要,那么我們的webservice的地址就是http://localhost:8080/yourProgramName/webservice/Greeting===-->
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
好了。到此我們的服務(wù)端就開發(fā)好了。。
就可以通過http://localhost:8080/yourProgramName/webservice/Greeting?wsdl 訪問看到我們的wsdl了。
下面開發(fā)我們的客戶端,來(lái)調(diào)用上面的服務(wù)。
package com.mycompany.webservice.client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public class GreetingServiceClient {
public static void main(String[] args) {
//創(chuàng)建WebService客戶端代理工廠
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//注冊(cè)WebService接口
factory.setServiceClass(Greeting.class);
//設(shè)置WebService地址
factory.setAddress("http://localhost:8080/yourProgramName/webservice/Greeting");
Greeting greetingService = (Greeting)factory.create();
System.out.println("invoke webservice...");
System.out.println("message context is:"+greetingService.greeting("gary"));
}
}
好了客戶端也開發(fā)完成。