jax-jaxws发布webservice服务必须在main方法吗

远程技术(1)
在Java中一共有三种WebService规范,Jax-WS,JAXM,Jax-RS。
Jax-WS(Java Api for XML-Based WebService)JAXM支持文件传输,暴露更多底层细节,不建议使用Jax-RS是针对Restful风格定制的一套Web服务规范(建议重点掌握)
JaxWS是实现例子入门
package cn.blueboz.ws;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
* Created by blueboz.chen on .
* 首先是编写SEI(Service Endpoint Interface)服务端点接口
* SEI在WebService中称为PortType
public interface IHelloWebService {
public String sayHello(String username);
2.编写SEI实现类,此类作为WebService提供服务类
package cn.blueboz.ws.impl;
import cn.blueboz.ws.IHelloWebService;
import javax.jws.WebService;
* Created by blueboz.chen on .
@WebService(
serviceName = &HelloWebServiceImpl&
public class HelloWebServiceImpl implements IHelloWebService {
public String sayHello(String username) {
return &你好&+username+&!欢迎使用WebService!&;
3.发布服务(方式一)
这是第一种发布服务端的方式,通过Java内置的Endpoint进行发布WebService服务
package cn.blueboz.ws;
import cn.blueboz.ws.impl.HelloWebServiceImpl;
import javax.xml.ws.Endpoint;
* Created by blueboz.chen on .
public class Server {
public static void main(String[] args) {
Endpoint.publish(&http://localhost:8888/Hello&,new HelloWebServiceImpl());
}发布服务之后,我们可以打开终端,输入
C:\Users\Administrator& netstat -ano|findstr &8888&
& TCP & &127.0.0.1:8888 & & & & 0.0.0.0:0 & & & & & & &LISTENING & & & 18348
可以看到存在端口8888,因为我们Endpoint发布接口时指定发布端口是8888,所以看到了端口占用,接下来我们用浏览器打开
http://localhost:8888/Hello,只要能看到下面这个,就说明接口发布成功了!
4.发布服务方式二,使用CXF方式发布
要想使用CXF,必须先到Apache CXF下先下载CXF。
http://cxf.apache.org/
也可以在这里下载
http://download.csdn.net/detail/blueboz/9498010
我使用的版本是3.1.6.然后解压,可以看到如下的目录结构
bin文件夹包含需要使用的wsdl2java工具。就是生成客户端代码的工具。等
所以接下来我们需要配置环境变量,否则wsdl2java可能无法使用
新建如下环境变量
CXF_HOME-&cxf解压路径在path环境变量追加;%CXF_HOME%\在ClassPath环境变量追加%CXF_HOME%\
如果使用IDE开发,可以自己手动的把lib文件夹下所有的包导入。
这里之所以导入所有包,是为了教程方便,如果想自己尝试最小导包,可以从cxf-core开始,然后一个一个导入即可。
回到我们的IDE,新建另外一个类
package cn.blueboz.ws.impl;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
* Created by blueboz.chen on .
public class CxfServer {
* 通过CXF方式发布接口
* @param args
public static void main(String[] args) {
JaxWsServerFactoryBean factoryBean=new JaxWsServerFactoryBean();
factoryBean.setAddress(&http://localhost:8888/Hello&);
factoryBean.setServiceClass(HelloWebServiceImpl.class);
factoryBean.create();
}运行之后,访问地址,可以看到步骤三看到的页面就说明接口发布成功了。
至于客户端怎么调用,请看我的下一个博客
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1758次
排名:千里之外
原创:17篇Java API for XML Web Services (JAX-WS) 2.0, JSR 224 是 Java EE 5 平台的一个重要组成部分。作为 Java API for XML-based RPC 1.1(JAX-RPC) 的后续发行,JAX-WS使用 Java 技术简化了 Web 服务的开发任务。它解决了 JAX-RPC 1.1 中存在的一些问题,提供了对 SOAP 1.1、SOAP 1.2 和 XML 等多个协议的支持,并提供了一个工具专门支持 HTTP 等其他协议。JAX-WS 使用 JAXB 2.0 进行数据绑定,并支持通过定制控制生成的服务端点接口。通过其对注释的支持,JAX-WS 简化了 Web 服务开发并减少了运行时 JAR 文件的大小.
本文档将简要介绍如何使用 IDE 开发 JAX-WS Web 服务并在三个不同的客户机中使用它&&Java SE 应用程序中的 Java 类以及 Web 应用程序中的 servlet 或 JSP 页面。本文档所创建的三个客户机都是单独的应用程序,他们都使用相同的 Web 服务。有关客户机的高级教程,请参阅 JAX-WS Web 服务客户机入门。
本教程所需要的软件
开始之前,需要在您的计算机中下载并安装以下软件:
NetBeans IDE 6.0 Web & Java EE( 下载)。
Java Standard Development Kit(JDK)版本 5.0 或版本 6.0( 下载)。
Glassfish V2 或 Tomcat Web Server,两者都可在 NetBeans IDE 6.0 安装程序中选择安装。
创建 Web 服务
本练习的目标是创建一个适合所选部署容器的项目。然后,我们将在项目中创建一个 Web 服务。
可以将 Web 服务部署在 Web 容器或 EJB 容器中。这由实现的选择决定。比如说,如果计划部署到 Tomcat Web Server 中且其中只有一个 Web 容器,则应该选择创建一个 Web 应用程序,而不是 EJB 模块。
选择 File > New Project(Ctrl-Shift-N)选项。选择 Web 类别中的 Web Application 选项,或者选择 Enterprise 类别中的 EJB Module。
将项目命名为 CalculatorWSApplication。
根据所使用的部署服务器,执行以下操作:
对于 GlassFish,将 Java EE Version 设置为 Java EE 5.
对于 Tomcat Web Server,取消选中 Set Source Level to 1.4 复选框。
单击 Finish 按钮。
通过学习 Java 类创建 Web 服务
右键单击 CalculatorWSApplication 节点,然后选择 New > Web Service 选项。
将 Web 服务命名为 CalculatorWS,并在 Package 字段中键入 org.me.calculator,然后单击 Finish 按钮。
Projects 窗口将显示新 Web 服务的结构,并且可视化设计器将显示在编辑器区域。比如说对于 Web 应用程序,IDE 应如下所示:
设计 Web 服务
本练习的目标是使用 IDE 所生成的文件和代码执行一些有意义的任务。我们将添加一个操作。该操作将添加两个从客户机接收的数字。
在 Web 服务中添加业务逻辑
单击可视化设计器中的 Add Operation 按钮。
此时将出现一个对话框,我们可以在其中定义新操作。
在 Add Operation 对话框的上部,在 Name 字段中键入 add 并在 Return Type 下拉列表中键入 int。在 Add Operation 对话框的下部,单击 Add 按钮并创建一个 int 类型的参数,将其命名为 i。然后,再次单击 Add 按钮并创建一个 int 类型的参数,将其命名为 j。
IDE 应如下所示:
单击 Add Operation 对话框底部的 OK 按钮。
此时,可视化设计器中将显示以下内容:
单击 Source 按钮可以查看前面步骤中生成的源代码,如下所示:
在编辑器中,将框架 add 操作扩展为以下内容(修改以粗体显示):@WebMethod
   public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
int k = i +
     return
从以上代码可以看出,Web 服务将接收两个数字并返回他们的和:在下一节中,我们将使用 IDE 测试刚才创建的 Web 服务。
部署和测试 Web 服务
将 Web 服务部署到 Web 容器时,我们可以使用 IDE 测试 Web 并查看其功能是否符合预期。IDE 中集成了 GlassFish 所提供的 Tester 应用程序,可以实现此目的。对于 Tomcat Web Server,它也提供了一个类似的工具。但是,GlassFish 的 Tester 页面允许用户输入值并进行测试,而 Tomcat Web Server 却不支持此功能。在后者中,我们只能看到所部署的 Web 服务,而不能输入值进行测试。目前,用于测试 EJB 模块是否已成功部署的工具还不可用。
测试是否成功部署到 Web 容器
右键单击项目并选择 Run 选项。
IDE 将启动应用服务器,编译应用程序并在浏览器中打开。
展开 Web Services 节点,右键单击代表该 Web 服务的节点,然后选择 Test Web Service 选项。
IDE 将在浏览器中打开测试程序页面,前提是在 GlassFish 中部署了一个 Web 应用程序。对于 Tomcat Web Server 和 EJB 模块的部署,情况则有所不同。
如果部署到 GlassFish,在测试程序页面中键入两个数字,如下所示:
此时,将显示这两个数字的和:
对于部署到 Tomcat Web Server 情况,您将看到以下页面,其中显示 Web 服务已成功部署:
右键单击项目节点,选择 Properties 选项,然后单击 Run 按钮。根据所使用的部署服务器,执行以下操作:
对于 GlassFish,在 Relative URL 字段中键入 /CalculatorWSService?Tester。
对于 Tomcat Web Server,在 Relative URL 字段中键入 /CalculatorWS?Tester。
注意: 由于已部署 EJB 模块的结果并未显示在浏览中,我们无法采用上述步骤处理 EJB 模块。
使用 Web 服务
部署好 Web 服务后,我们需要创建一个客户机来使用 Web 服务的 add 方法。在本文中,我们将创建三个客户机:分别为 Java SE 应用程序中的一个 Java 类,一个 servlet 和 Web 应用程序中的一个 JSP 页面。
注意: 有关客户机的高级教程,请参阅 JAX-WS Web 服务客户机入门。
客户机 1:Java SE 应用程序中的 Java 类
在本节中,我们将创建一个标准的 Java 应用程序。我们将使用创建应用程序的向导再创建一个 Java 类。然后,我们将在一些 IDE 工具中使用本教程开始部分中所创建的 Web 服务。
选择 File > New Project(Ctrl-Shift-N)选项。选择 General 类别中的 Java Application 选项。将项目命名为 CalculatorWS_Client_Application。单击 Finish 按钮。
右键单击 CalculatorWS_Client_Application 节点,然后选择 New > Web Service Client 选项。
在 Project 窗口中,单击 Browse 按钮。浏览到要使用的 Web 服务:选择 Web 服务之后,单击 OK 按钮。
输入 org.me.calculator.client 作为包名,然后单击 Finish 按钮。
Projects 窗口将显示新建的 Web 服务客户机,其中有一个节点为所创建的 add 方法。
双击 Main.java 节点在 Source Editor 中打开它。删除 TODO 注释,然后将上面的 add 节点拖动到空行中。应该能看到以下内容:
public static void main(String[] args) {
   try { // Call Web Service Operation
     org.me.calculator.client.CalculatorWSService service = new
org.me.calculator.client.CalculatorWSService();
     org.me.calculator.client.CalculatorWS port = service.getCalculatorWSPort();
     // TODO initialize WS operation arguments here
     int i = 0;
     int j = 0;
     // TODO process result here
     int result = port.add(i, j);
     System.out.println("Result = "+result);
   } catch (Exception ex) {
     // TODO handle custom exceptions here
注意: 除了拖动 add 节点之外还有另外一种方法:在编辑器中单击鼠标右键,然后选择 Web Service Client Resources > Call Web Service Operation 选项。
使用有意义的数字初始化这两个 int 类型的变量,比如说 3 和 4。只需将上面的两个 int 变量的值从 0 修改为其他数字。
右键单击项目节点并选择 Run 选项。
此时,Output 窗口将显示两个数字之和:
   Result = 7
   BUILD SUCCESSFUL (total time: 1 second)
客户机 2:Web 应用程序中的 Servlet
在本节中,我们将创建一个新的 Web 应用程序,然后再创建一个 servlet。然后,我们将通过 servlet 来使用本教程开始部分中所创建的 Web 服务。
选择 File > New Project(Ctrl-Shift-N)选项。选择 Web 类别中的 Web Application 选项。将项目命名为 CalculatorWSServletClient。单击 Finish 按钮。
右键单击 CalculatorWSServletClient 节点,然后选择 New > Web Service Client 选项。
此时将出现 New Web Service Client 向导。
在 Project 窗口中,单击 Browse 按钮。浏览到要使用的 Web 服务:选择 Web 服务之后,单击 OK 按钮。
在 Package 字段中,输入 org.me.calculator.client。
IDE 应如下所示:
单击 Finish 按钮。
Projects 窗口中的 Web Service References 节点将显示新建客户机的结构,其中包括本教程前面所创建的 add 方法。
右键单击 CalculatorWSServletClient 项目节点,然后选择 New > Servlet 选项。将 servlet 命名为 ClientServlet,并在 Package 下拉菜单中键入 org.me.calculator.client。单击 Finish 按钮。
要使用 servlet 成为应用程序的入口点,右键单击项目节点并选择 Properties 选项,然后单击 Run 按钮并在 Relative URL 中输入 /ClientServlet。单击 OK 按钮。
在 Source Editor 中,删除 processRequest 方法主体中的注释行。该行如下所示:/* TODO output your page here
接下来,删除代码注释的结束部分:
在该行后面添加一些空行:
out.println("Servlet ClientServlet at " + request.getContextPath () + "");
现在,将代表 add 操作的节点拖动到所创建的空行中。
现在, processRequest 方法将如下所示(添加代码以粗体显示):
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
     response.setContentType("text/charset=UTF-8");
     PrintWriter ut = response.getWriter();
     out.println("");
     out.println("");
     out.println("Servlet ClientServlet");
     out.println("");
     out.println("");
     out.println("Servlet ClientServlet at " + request.getContextPath () +
try { // Call Web Service Operation
       org.me.calculator.client.CalculatorWS port = service.getCalculatorWSPort();
       // TODO initialize WS operation arguments here
       int i = 0;
       int j = 0;
       // TODO process result here
       int result = port.add(i, j);
       out.println("Result = "+result);
     } catch (Exception ex) {
       // TODO handle custom exceptions here
     }
     out.println("");
     out.println("");
     out.close();
将 i 变量和 j 变量的值修改为比较有意义的数字,比如说 3 和 4。
右键单击项目节点并选择 Run 选项。
IDE 将启动服务器(如果尚未运行);编译并部署应用程序,然后将在浏览器中打开,其中会显示计算结果,如下图所示:
客户机 3:Web 应用程序中的 JSP 页面
在本节中,我们将创建一个新的 Web 应用程序,然后在 Web Application 向导所创建的默认 JSP 页面中使用该 Web 服务。
选择 File > New Project(Ctrl-Shift-N)选项。选择 Web 类别中的 Web Application 选项。将项目命名为 CalculatorWSJSPClient。单击 Finish 按钮。
右键单击 CalculatorWSJSPClient 节点,然后选择 New > Web Service Client 选项。
在 Project 窗口中,单击 Browse 按钮。浏览到要使用的 Web 服务:选择 Web 服务之后,单击 OK 按钮。
在 Package 字段中,输入 org.me.calculator.client。
IDE 应如下所示:
单击 Finish 按钮。
Projects 窗口将显示新的 Web 服务客户机,如下所示:
在 Web Service References 节点中,展开表示该 Web 服务的节点。我们希望通过客户机调用的 add 操作现在已经公开。
将 add 操作拖动到客户机的 index.jsp 页面中,并将其放置在 H1 标记下面。现在, index.jsp 页面中已经生成了调用服务操作的代码,如下所示:<%
   org.me.calculator.client.CalculatorWSService service =
     new org.me.calculator.client.CalculatorWSService();
   org.me.calculator.client.CalculatorWS port =
     service.getCalculatorWSPort();
   // TODO initialize WS operation arguments here
   int i = 0;
   int j = 0;
   // TODO process result here
   int result = port.add(i, j);
   out.println("Result = "+result);
} catch (Exception ex) {
   // TODO handle custom exceptions here
将 i 变量和 j 变量的值从 0 修改为比较有意义的数字,比如说 3 和 4。
右键单击项目节点并选择 Run 选项。
IDE 将启动服务器(如果尚未运行);编译并部署应用程序,然后将在浏览器中打开,其中会显示计算结果:
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
上一篇:下一篇:
相关经验教程
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益JAX-WS实现Web Service程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
JAX-WS实现Web Service程序
上传于||文档简介
&&W&#8203;E&#8203;B
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩13页未读,继续阅读
你可能喜欢java调用 Myeclipse用jax-ws创建的webservice具体方法(三) - 推酷
java调用 Myeclipse用jax-ws创建的webservice具体方法(三)
首先需要下载所需的jar包,webservices所需全部jar包下载(点击打开链接)
& & & &直接上代码:
& & & & & & &&
import java.net.MalformedURLE
import java.net.URL;
import java.rmi.RemoteE
import javax.xml.namespace.QN
import javax.xml.rpc.ServiceE
import org.apache.axis.client.C
import org.apache.axis.client.S
public class GetData {
* @param args
* @throws MalformedURLException
public static void main(String[] args) throws MalformedURLException {
// TODO Auto-generated method stub
String result =
String endpoint = &http://192.168.1.106/Service1.asmx?wsdl&;
//这是调用C#用的
String endpoint = &http://192.168.1.101:8888/WebService1/HelloServicePort&;//是HelloServicePort 要在原类的基础上加个Port?wsdl 否则访问不到
//直接引用远程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endpoint));
//call.setOperationName(&sayHelloToPerson&);//WSDL里面描述的接口名称 C#
此处与C#有区别
call.setOperationName(new QName(&http://fang.chao/&, &sayHelloToPerson&));//java
这里的http://fang.chao/指的是targetNamespace(包名反过来 我的包 是 chao.fang.HelloService)
相当于上篇里的=&http://tempuri.org/
call.addParameter(&name&, org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//接口的参数
call.addParameter(&arg0&,
//参数名,注意此处要写.apt_grnerated 文件下 相应函数的相应参数名 ,我以前一直写的name,所以一直传不过去参数
org.apache.axis.encoding.XMLType.XSD_STRING,
//注意是String
javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
call.setUseSOAPAction(true);
JAVA调用NET 报服务器未能识别 HTTP 头 SOAPAction 的值,遇到这种问题时,是因为没有设SOAPAction
的值,加上这行代码就可以 call.setSOAPActionURI(&http://fang.chao/sayHelloToPerson&);,注意后面的sayHelloToPerson方法哦,是方法名,一定要带哦*/
call.setSOAPActionURI(&http://fang.chao/sayHelloToPerson&);
String temp = &fangchao&;//为arg0参数传值
result = (String)call.invoke(new Object[]{temp});
//给方法传递参数,并且调用方法
System.out.println(&result is &+result);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致服务端:package com.yinfu.import javax.jws.WebSimport javax.xml.ws.E@WebService
public class TestWebsService {
public String sayHello(String username) {
return "Hello: " +
public static void main(String[] args) {
Endpoint.publish("http://localhost:8075/com.yinfu.service.TestWebsService", new TestWebsService());
System.out.println("Success");
}}&在想要发布为WebService的类上加上注解@WebService,这个类的方法就变为WebService的方法了,再通过Endpoint的publish方法,发布这个服务,到此,一个最简单的WebService搞定。运行main方法,在浏览器里输入&http://localhost:8075/com.yinfu.service.TestWebsService?wsdl&&&会看到你的WSDL信息。OK,说明服务端没有问题,搭建成功客户端:在命令行输入命令 wsimport -p [包名] -keep [发布的服务地址?wsdl] 生成客户端代码,如生成本例的客户端代码wsimport -p com.yinfu.service.client-keep http://localhost:8075/com.yinfu.service.TestWebsService?wsdl&,当然,前提是你已经配好了JAVA环境变量。控制台会显示注意现在需要找到生成的客户端java代码,控制台指向在那生成的代码就在哪里,例如我控制台指向的是C:/Users/Administrator/那么我生成的java文件就在C:/Users/Administrator/&com/yinfu/service/client/中,这个地方注意一下就可以了,有很多人不知道生成的代码去哪里了!OK,把生成的代码拷贝到客户端的项目中,package com.yinfu.service.public class HelloClient {
* @param args
public static void main(String[] args) {
TestWebsServiceService myService = new TestWebsServiceService();
TestWebsService ms = myService.getTestWebsServicePort();
String s = ms.sayHello("why");
System.out.println(s);
}}&利用这些生成的客户端代码,就可以调用这个WebService服务了:执行代码,输出:Hello why。运行的时候要注意服务端的项目服务是启动的。}

我要回帖

更多关于 jaxws发布webservice 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信