1. 程式人生 > >Jfinal web專案中 利用JAX-WS釋出webService 返回json字串

Jfinal web專案中 利用JAX-WS釋出webService 返回json字串

一、編寫java程式碼

import java.util.List;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.servlet.http.HttpServletRequest;

import org.apache.axis.MessageContext;
import org.apache.axis.transport.http.HTTPConstants;

import com.flysoft.jfinal.model.OptionInfo;
import com.flysoft.jfinal.model.VoteInfo;
import com.flysoft.jfinal.model.VotePeriods;
import com.flysoft.jfinal.service.admin.OptionInfoService;
import com.flysoft.jfinal.service.admin.VotePeriodsService;
import com.flysoft.jfinal.util.DateUtils;
import com.jfinal.plugin.activerecord.Db;
@SOAPBinding(style = SOAPBinding.Style.RPC)
@WebService(
		targetNamespace = "http://webserivce.jfinal.fly.com/",//目標名稱空間 
		serviceName = "VoteWebServiceService",//服務名稱 
		portName = "VoteWebServicePort")

public class VoteWebServiceController{
	
	public String votePeriodsHome(String periodsId) {
		VotePeriods votePeriods =VotePeriods.dao.findById(periodsId);//投票期數資訊
		List<OptionInfo> OptionInfoList =OptionInfo.dao.find("select * from option_info where periodsid = ? ",periodsId);						
		String str="";
		str+=votePeriods.toJson()+"\n" ;
		for(OptionInfo o:OptionInfoList){
			str+=o.toJson()+"\n" ;//Jfinal中自行將自定義物件轉成json
		}
		return str;
	}	
二、web.xml配置
<!-- webservice -->
	<servlet>
		<servlet-name>VoteWebServiceService</servlet-name>
		<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>VoteWebServiceService</servlet-name>
		<url-pattern>/VoteWebServicePort</url-pattern>
	</servlet-mapping>
	<!-- webservice end -->
三、在WEB-INF下新建sun-jaxws.xml,配置如下:
<?xml version = "1.0"?>
<!-- 其中xmlns是固定的-->
<endpoints version="2.0"xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
    <!-- name:與webService註解中portName對應,implementation:要釋出的類所在位置,url-pattern:即webService註解中portName前加/-->
<endpoint name="VoteWebServicePort"
implementation="com.flysoft.jfinal.app.webService.VoteWebServiceController"
url-pattern="/VoteWebServicePort">
</endpoint>
</endpoints>
四、執行專案,若成功訪問http://127.0.0.1:8080/VoteWebServicePort?wsdl,則釋出成功。

五、利用call類呼叫webService進行測試

public static void main(String[] args) throws Exception{
		String wsdlUrl = "http://127.0.0.1:8080/VoteWebServicePort?wsdl";
		Service service = new Service();
        Call call = (Call)service.createCall();
        call.setTargetEndpointAddress(new URL(wsdlUrl));
       // WSDL裡面描述的介面名稱(要呼叫的方法) 
       /* call.setOperationName(new QName("http://webserivce.jfinal.flysoft.com/", "optionId"));
       // 介面方法的引數名, 引數型別,引數模式  IN(輸入), OUT(輸出) or INOUT(輸入輸出)  
        call.addParameter("arg0", XMLType.XSD_STRING, ParameterMode.IN);//特別注意引數名為wsdl中的引數名如arg0,arg1...,不是自定義的
       // 設定被呼叫方法的返回值型別 
        //call.setReturnType(Constants.XSD_STRING); //可不寫
        // 給方法傳遞引數,並且呼叫方法
        String et = (String)call.invoke(new Object[]{"7"}); 
       System.out.println(et+"===");