Jfinal web專案中 利用JAX-WS釋出webService 返回json字串
阿新 • • 發佈:2019-02-16
一、編寫java程式碼
二、web.xml配置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-INF下新建sun-jaxws.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 -->
四、執行專案,若成功訪問http://127.0.0.1:8080/VoteWebServicePort?wsdl,則釋出成功。<?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>
五、利用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+"===");