NetBean和GlassFish v3 開發Web Service

來源:互聯網
上載者:User

最近在學習Java EE6 ,使用NetBean 6.8和GlassFish v3進行學習開發。對Java EE6
的感覺很不錯,它屏蔽了很多細節方面的東東,方便了開發,尤其是Annotation(註解)解脫了配置XML的煩惱。我不想說Annotation多麼
多麼好,所有的技術都有其問題域,都有其觸及不到的地方,Java ,.Net 也是如此。

1.開發JAX-WS Web Service 服務端.

   a.使用NetBean 建立一個Web Application

   b. 建立一個Service

 

package server </p><p> import javax.jws.WebService;<br /> import javax.jws.webMethod; </p><p> @WebService<br /> public class Hello {<br /> private String message = new String( "Hello, " );<br /> public void Hello() {<br /> } </p><p> @WebMethod<br /> public String sayHello(String name) {<br /> return message + name + "." ;<br /> }<br />}

 

服務建完後,可以用NetBean提供的測試功能對其進行測試,說實在的這個功能很實用。

  測試服務地址:http://localhost:8080/helloservice/HelloService?Tester

  WSDL地址:http://localhost:8080/helloservice/HelloService?WSDL

2. 開發JAX-WS Web Service 用戶端

   a.用NetBean建立Web Application

   b.建立Web Service 用戶端

   c.建立Servlet

 

 

package client; </p><p> import java.io.IOException;<br /> import java.io.PrintWriter;<br /> import javax.servlet.ServletException;<br /> import javax.servlet.annotation.WebServlet;<br /> import javax.servlet.http.HttpServlet;<br /> import javax.servlet.http.HttpServletRequest;<br /> import javax.servlet.http.HttpServletResponse;<br /> import javax.xml.ws.WebServiceRef;<br /> import ws.Hello;<br /> import ws.HelloService; </p><p> /**<br /> *<br /> * @author rywei<br /> */<br /> @WebServlet (name= "WsClient" , urlPatterns={ "/WsClient" })<br /> public class WsClient extends HttpServlet {<br /> @WebServiceRef (wsdlLocation= "WEB-INF/wsdl/localhost_8080/StudyWeb/HelloService.wsdl" )<br /> private HelloService helloservice;<br /> /**<br /> * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.<br /> * @param request servlet request<br /> * @param response servlet response<br /> * @throws ServletException if a servlet-specific error occurs<br /> * @throws IOException if an I/O error occurs<br /> */<br /> protected void processRequest(HttpServletRequest request, HttpServletResponse response)<br /> throws ServletException, IOException {<br /> response.setContentType("text/html;charset=UTF-8" );<br /> String s="" ;<br /> if (helloservice!= null ){<br /> Hello hello=helloservice.getHelloPort();<br /> s = hello.sayHello("RenYan Wei" );<br /> }<br /> PrintWriter out = response.getWriter(); </p><p> try { </p><p> out.println("<html>" );<br /> out.println("<head>" );<br /> out.println("<title>Servlet WsClient</title>" );<br /> out.println("</head>" );<br /> out.println("<body>" );<br /> out.println("<h1>Servlet WsClient at " + request.getContextPath () + "</h1>" );<br /> out.println("<br>" );<br /> out.println(s);<br /> out.println("</body>" );<br /> out.println("</html>" ); </p><p> } finally {<br /> out.close();<br /> }<br /> } </p><p> // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."><br /> /**<br /> * Handles the HTTP <code>GET</code> method.<br /> * @param request servlet request<br /> * @param response servlet response<br /> * @throws ServletException if a servlet-specific error occurs<br /> * @throws IOException if an I/O error occurs<br /> */<br /> @Override<br /> protected void doGet(HttpServletRequest request, HttpServletResponse response)<br /> throws ServletException, IOException {<br /> processRequest(request, response);<br /> } </p><p> /**<br /> * Handles the HTTP <code>POST</code> method.<br /> * @param request servlet request<br /> * @param response servlet response<br /> * @throws ServletException if a servlet-specific error occurs<br /> * @throws IOException if an I/O error occurs<br /> */<br /> @Override<br /> protected void doPost(HttpServletRequest request, HttpServletResponse response)<br /> throws ServletException, IOException {<br /> processRequest(request, response);<br /> } </p><p> /**<br /> * Returns a short description of the servlet.<br /> * @return a String containing servlet description<br /> */<br /> @Override<br /> public String getServletInfo() {<br /> return "Short description" ;<br /> }// </editor-fold> </p><p> } </p><p>

package client;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.xml.ws.WebServiceRef;import ws.Hello;import ws.HelloService;/** * * @author rywei */@WebServlet(name="WsClient", urlPatterns={"/WsClient"})public class WsClient extends HttpServlet {    @WebServiceRef(wsdlLocation="WEB-INF/wsdl/localhost_8080/StudyWeb/HelloService.wsdl")   private HelloService helloservice;    /**      * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.     * @param request servlet request     * @param response servlet response     * @throws ServletException if a servlet-specific error occurs     * @throws IOException if an I/O error occurs     */    protected void processRequest(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {        response.setContentType("text/html;charset=UTF-8");        String s="";        if (helloservice!=null){            Hello hello=helloservice.getHelloPort();            s = hello.sayHello("RenYan Wei");        }        PrintWriter out = response.getWriter();        try {                       out.println("<html>");            out.println("<head>");            out.println("<title>Servlet WsClient</title>");              out.println("</head>");            out.println("<body>");            out.println("<h1>Servlet WsClient at " + request.getContextPath () + "</h1>");            out.println("<br>");            out.println(s);            out.println("</body>");            out.println("</html>");                  } finally {             out.close();        }    }     // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">    /**      * Handles the HTTP <code>GET</code> method.     * @param request servlet request     * @param response servlet response     * @throws ServletException if a servlet-specific error occurs     * @throws IOException if an I/O error occurs     */    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {        processRequest(request, response);    }     /**      * Handles the HTTP <code>POST</code> method.     * @param request servlet request     * @param response servlet response     * @throws ServletException if a servlet-specific error occurs     * @throws IOException if an I/O error occurs     */    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {        processRequest(request, response);    }    /**      * Returns a short description of the servlet.     * @return a String containing servlet description     */    @Override    public String getServletInfo() {        return "Short description";    }// </editor-fold>}   


  

  在瀏覽器內開啟http://localhost:8080/WsClient/HelloServlet 進行測試

讓人頭疼的事是GlassFish v3 內不能在同一個Web Application 同時有用戶端與服務端。我建了兩個工程,A工程

是服務端,B工程是用戶端,這時能正常運行,當我在B工程裡建個服務端,要在A工程內進行調用時,就會產生錯誤,我找了很長時間也不知道是怎麼回事,望各位大俠知道的話,歡迎分享,謝謝。

錯誤如下:

資訊: Loading application WSWeb at /WSWeb

資訊: WSWeb was successfully deployed in 2,656 milliseconds.

警告: Servlet web service endpoint 'Good' failure

java.lang.IllegalArgumentException: class
org.glassfish.webservices.JAXWSServlet has neither @WebService nor
@WebServiceProvider annotation

        at com.sun.xml.ws.server.EndpointFactory.verifyImplementorClass(EndpointFactory.java:303)

        at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:120)

        at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:505)

        at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:560)

        at org.glassfish.webservices.JAXWSServlet.registerEndpoint(JAXWSServlet.java:394)

        at org.glassfish.webservices.JAXWSServlet.doInit(JAXWSServlet.java:262)

        at org.glassfish.webservices.JAXWSServlet.init(JAXWSServlet.java:97)

        at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1428)

        at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:1060)

        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:187)

        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)

        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)

        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)

        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)

        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)

        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)

        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)

        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)

        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)

        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)

        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)

        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)

        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)

        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)

        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)

        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)

        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)

        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)

        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)

        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)

        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)

        at java.lang.Thread.run(Thread.java:619)

警告: StandardWrapperValve[Good]: PWC1382: Allocate exception for servlet Good

javax.servlet.ServletException

        at org.glassfish.webservices.JAXWSServlet.doInit(JAXWSServlet.java:269)

        at org.glassfish.webservices.JAXWSServlet.init(JAXWSServlet.java:97)

        at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1428)

        at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:1060)

        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:187)

        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)

        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)

        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)

        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)

        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)

        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)

        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)

        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)

        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)

        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)

        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)

        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)

        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)

        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)

        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)

        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)

        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)

        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)

        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)

        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)

        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)

        at java.lang.Thread.run(Thread.java:619)

Caused by: java.lang.IllegalArgumentException: class
org.glassfish.webservices.JAXWSServlet has neither @WebService nor
@WebServiceProvider annotation

        at com.sun.xml.ws.server.EndpointFactory.verifyImplementorClass(EndpointFactory.java:303)

        at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:120)

        at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:505)

        at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:560)

        at org.glassfish.webservices.JAXWSServlet.registerEndpoint(JAXWSServlet.java:394)

        at org.glassfish.webservices.JAXWSServlet.doInit(JAXWSServlet.java:262)

        ... 26 more

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.