`

CXF Web Service入门实例一

 
阅读更多

最近开发开始学习Web Service,如果你是大神,请路过!谢谢!遵循前辈大神们的教导~~~,内事不决问度娘,外事不决问谷歌(现在谷歌已经不能用了),只能问度娘了!上网一百度,套用周董的一句歌词,霍,霍,霍,霍,这么多的套路(axis,axis2,XFire,CXF),我到底选择哪一个?因为要和Spring进行对接,看了一下,CXFSpring的耦合度最好,于是就选择了CXF。上官网下jar包,下了最新的apache-cxf-3.1.4.zip包。解压出来,看看里面的最简单的实例,apache-cxf-3.1.4\samples\java_first_jaxws,本着你快乐所以我快乐加上不要脸的原则,我抄抄抄,改了一下名字,开发环境jdk1.6, jdk1.5没试过,上眼呐!

新建工程mywbs,导入jar

 

cxf-core-3.1.4.jar

jetty-continuation-9.2.11.v20150529.jar

jetty-http-9.2.11.v20150529.jar

jetty-io-9.2.11.v20150529.jar

jetty-server-9.2.11.v20150529.jar

jetty-util-9.2.11.v20150529.jar

wsdl4j-1.6.3.jar

xmlschema-core-2.2.1.jar

 

一、接口类IHelloWorld.java

package com.ws.hello;

import java.util.List;

import javax.jws.WebService;

import com.ws.entity.Users;

@WebService

publicinterface IHelloWorld {

public String sayHello(String name);

public String getUserName(Users user);

public List<Users> getListUser();

}

 

二、实现类(说明endpointInterface = "com.ws.hello.IHelloWorld"IHelloWorld类加上路径,此处注意HelloWorldImpl.java

package com.ws.hello;

import java.util.ArrayList;

import java.util.List;

import javax.jws.WebService;

import com.ws.entity.Users;

@WebService(endpointInterface = "com.ws.hello.IHelloWorld",serviceName = "IHelloWorld", portName="IHelloWorldPort")

publicclass HelloWorldImpl implements IHelloWorld {

 

@Override

public String sayHello(String name) {

return name + ": 您好啊!";

}

 

@Override

public String getUserName(Users user) {

return user.getName();

}

 

@Override

public List<Users> getListUser() {

System.out.println("getListUser called~~~");

List<Users> list = new ArrayList<Users>();

list.add(new Users(2,"张三"));

list.add(new Users(3, "十八罗汉"));

list.add(new Users(4,"五王"));

return list;

}

 

}

 

三、实体类Users

package com.ws.entity;

import java.io.Serializable;

publicclass Users implements Serializable{

privatestaticfinallongserialVersionUID = -5031894017095689998L;

private Integer id;

private String name;

public Integer getId() {

returnid;

}

publicvoid setId(Integer id) {

this.id = id;

}

public String getName() {

returnname;

}

publicvoid setName(String name) {

this.name = name;

}

public Users(Integer id, String name) {

super();

this.id = id;

this.name = name;

}

public Users() {

super();

}

}

 

 

Users类如果不写默认构造方法,将报如下异常:

Exception in thread "main" javax.xml.ws.WebServiceException: Unable to create JAXBContext

at com.sun.xml.internal.ws.model.AbstractSEIModelImpl.createJAXBContext(Unknown Source)

at com.sun.xml.internal.ws.model.AbstractSEIModelImpl.postProcess(Unknown Source)

at com.sun.xml.internal.ws.model.RuntimeModeler.buildRuntimeModel(Unknown Source)

at com.sun.xml.internal.ws.server.EndpointFactory.createSEIModel(Unknown Source)

at com.sun.xml.internal.ws.server.EndpointFactory.createEndpoint(Unknown Source)

at com.sun.xml.internal.ws.api.server.WSEndpoint.create(Unknown Source)

at com.sun.xml.internal.ws.api.server.WSEndpoint.create(Unknown Source)

at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(Unknown Source)

at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(Unknown Source)

at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(Unknown Source)

at javax.xml.ws.Endpoint.publish(Endpoint.java:220)

at com.ws.deploy.DeployHelloWorldService.<init>(DeployHelloWorldService.java:14)

at com.ws.deploy.DeployHelloWorldService.main(DeployHelloWorldService.java:23)

Caused by: java.security.PrivilegedActionException: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions

com.ws.entity.Users does not have a no-arg default constructor.

this problem is related to the following location:

at com.ws.entity.Users

at public java.util.List com.ws.hello.jaxws.GetListUserResponse._return

at com.ws.hello.jaxws.GetListUserResponse

 

at java.security.AccessController.doPrivileged(Native Method)

... 13 more

Caused by: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions

com.ws.entity.Users does not have a no-arg default constructor.

this problem is related to the following location:

at com.ws.entity.Users

at public java.util.List com.ws.hello.jaxws.GetListUserResponse._return

at com.ws.hello.jaxws.GetListUserResponse

 

at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(Unknown Source)

at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source)

at com.sun.xml.internal.bind.api.JAXBRIContext.newInstance(Unknown Source)

at com.sun.xml.internal.ws.developer.JAXBContextFactory$1.createJAXBContext(Unknown Source)

at com.sun.xml.internal.ws.model.AbstractSEIModelImpl$1.run(Unknown Source)

at com.sun.xml.internal.ws.model.AbstractSEIModelImpl$1.run(Unknown Source)

... 14 more

晕了,真是崩溃了,就写了这么几句话!错误代码比正常代码还要多!真是婶婶能忍叔叔不能忍,虽然英语很烂,连猜带蒙吧,看黑色的一句话,大概似乎是告诉我们Users类中没有默认的构造方法,果断加上,错误消失!此处应有掌声!鼓掌!!!

 

四、DeployHelloWorldService.java

 

package com.ws.deploy;

import javax.xml.ws.Endpoint;

import com.ws.hello.HelloWorldImpl;

 

publicclass DeployHelloWorldService {

protected DeployHelloWorldService() throws Exception {

System.out.println("Starting Server");

HelloWorldImpl implementor = new HelloWorldImpl();

//工程名

String address = "http://localhost:8080/mywbs";

Endpoint.publish(address, implementor);

}

 

/**

* @param args

* @throws Exception

*/

publicstaticvoid main(String[] args) throws Exception {

new DeployHelloWorldService();

System.out.println("Server ready...");

Thread.sleep(5 * 60 * 1000);

System.out.println("Server exiting");

System.exit(0);

}

 

}

 

点击运行,正常的话会有

Starting Server

Server ready...

 

IE地址栏中输入:http://localhost:8080/mywbs?wsdl

什么你不知道IE地址栏在哪里,对不起,大哥,地球是危险的,你回火星去吧!如果正常的话呢,大约在网页上会出现下面的信息,只截取一部分,注意画粗红线的地方,下面我们用的到。

五、客户端类(http://hello.ws.com/,这个就是上面画粗红线的地方)

package com.ws.client;

import java.net.URL;

 

import javax.xml.namespace.QName;

import javax.xml.ws.Service;

import javax.xml.ws.soap.SOAPBinding;

 

import com.ws.entity.Users;

import com.ws.hello.HelloWorldImpl;

import com.ws.hello.IHelloWorld;

 

publicfinalclass Client {

privatestaticfinal QName SERVICE_NAME = new QName("http://hello.ws.com/", "IHelloWorld");

privatestaticfinal QName PORT_NAME = new QName("http://hello.ws.com/", "IHelloWorldPort");

 

 

private Client() {

 

}

 

publicstaticvoid main(String args[]) throws Exception {

Service service = Service.create(SERVICE_NAME);

String endpointAddress = "http://localhost:8080/mywbs";

service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);

 

IHelloWorld hw = service.getPort(IHelloWorld.class);

System.out.println(hw.sayHello("张述飞"));

 

/**

URL url = new URL("http://localhost:8080/mywbs?wsdl");

Service service = Service.create(url,SERVICE_NAME);

 

IHelloWorld hw = service.getPort(IHelloWorld.class);

System.out.println(hw.sayHello("张述飞"));

 

System.out.println(hw.getUserName(new Users(1,"kaka")));

for(Users user : hw.getListUser()) {

System.out.println("List User [id:"+user.getId()+"][name:"+user.getName()+"]");

}*/

 

}

}

 

这样写点击运行的话,不知道为什么会报异常,如果有不报异常的话,请贴出来,谢谢!

Exception in thread "main" javax.xml.ws.WebServiceException: WSDL Metadata not available to create the proxy, either Service instance or ServiceEndpointInterface com.ws.hello.IHelloWorld should have WSDL information

at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source)

at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source)

at javax.xml.ws.Service.getPort(Service.java:168)

at com.ws.client.Client.main(Client.java:29)

将上面紫色代码注释,运行蓝色代码正常!这是小白我学习webservice的第一个程序,不知道为什么都是坑啊,一步一个坑,难道是坑坑更健康?将代码贴出来,希望有用到的或者要学习的小白们能少走一段弯路!本来想把工程给免费发布出来,后来想想还是算了吧,小白们还是手把手的配置一下吧!

 

分享到:
评论

相关推荐

    XFire 实现web service入门实例源码

    本教程将深入探讨如何使用XFire来实现一个基础的Web服务入门实例,并通过源码分析来增进理解。 首先,我们要明白Web服务的基本概念。Web服务基于开放标准,如SOAP(Simple Object Access Protocol)、WSDL(Web ...

    xfire实现web service入门实例

    Xfire(现更名为CXF)是Java平台上一个流行的开源框架,用于构建和部署Web服务。作为一个初学者,理解如何使用Xfire来实现Web服务是非常基础且重要的一步。下面将详细介绍Xfire实现Web服务的基础知识。 首先,我们...

    学习CXF WebService入门实例一.pdf

    本文将通过一个简单的入门实例介绍如何使用CXF来创建和部署Web Service。 首先,选择CXF作为Web Service框架的原因在于它对Spring的支持。CXF可以无缝地与Spring应用上下文集成,简化服务的配置和管理。在本实例中...

    CXF入门 -- 第一个简单webService

    CXF会自动生成一个WSDL(Web Service Description Language)文件,该文件描述了你的服务接口和操作。WSDL是Web服务的合同,客户端可以通过这个合同了解如何与服务交互。 8. **启动服务** 运行你的应用,CXF将会...

    CXF实例源代码(客户端)

    1. **CXF的基本概念**:CXF包含一系列组件和服务,如JAX-WS(Java API for XML Web Services)用于处理SOAP服务,JAX-RS(Java API for RESTful Web Services)处理REST服务。这些API提供了一种标准化的方式,将Java...

    CXF3.0.2+Spring3.2.14 WebService入门实例四

    【CXF3.0.2+Spring3.2.14 WebService入门实例四】的知识点解析 在本文中,我们将深入探讨如何使用Apache CXF 3.0.2版本和Spring 3.2.14框架来创建一个基于WebService的文件传输应用。Apache CXF是一个流行的开源...

    cxf入门文档

    5. **WSDL第一公民**:CXF对WSDL(Web Service Description Language)的支持,如何从WSDL生成服务和客户端代码。 6. **数据绑定**:JAXB(Java Architecture for XML Binding)的使用,将XML与Java对象映射,简化...

    cxf入门例子

    这里提到的"webserver"可能就是一个简单的应用服务器实例,用于运行和测试CXF服务。 5. **客户端调用**:在"webclient1"中,我们可以假设这是个简单的Web服务客户端示例,用于调用你创建的服务。CXF提供了客户端API...

    Web Service 之 XFire入门

    在“Web Service 之 XFire入门”这篇文章中,博主可能还会分享如何通过实例代码来演示这些步骤,例如创建一个名为“helloworld”的简单服务,这个服务可能只有一个返回“Hello, World!”的函数。这样的例子有助于...

    CXF入门.rar

    Apache CXF入门范例以及对传递ListMap类型的疑惑】中,可能会详细解释如何创建和调用一个使用CXF的Web服务,同时也可能讨论了在处理复杂数据类型如List, Object&gt;&gt;时遇到的问题和解决方案。通常,CXF允许你通过JAXB或...

    Web Service修炼之一XFire入门3

    在本文中,我们将聚焦于XFire——一个早期的Java Web Service框架,来探讨如何入门Web Service的开发。 XFire是Apache CXF项目的一部分,它提供了一个轻量级、高效且易于使用的API,使得开发者能够快速地创建和部署...

    Web_Service开发指南

    本指南将深入探讨AXIS、XFire和CXF这三个流行的Java Web Service框架,为初学者提供入门级的开发指导。 一、Web Service基础 Web Service的核心概念是通过SOAP(Simple Object Access Protocol)消息在互联网上交换...

    cxf入门

    CXF(CXF: Composite eXtensible Framework)是一个开源的Java框架,它主要用于构建和服务导向架构(Service-Oriented Architecture, SOA)中的Web服务。CXF允许开发者通过多种协议,如SOAP、RESTful HTTP、JMS等,...

    bpel入门实例(组合加减法运算)

    总结来说,这个"bpel入门实例(组合加减法运算)"是学习BPEL和Apache ODE的一个好起点。通过这个实例,你可以了解到如何使用BPEL来描述业务流程,以及如何与Apache CXF提供的Web服务进行交互。同时,这个实例也展示了...

    CXF与Spring整合的入门案列(优化最小的lib)

    本文将深入探讨如何实现CXF与Spring的整合,并提供一个最小化的依赖包配置案例,帮助初学者快速入门。 首先,CXF(Apache CXF)是一个开源的Java框架,主要用于构建和开发SOAP和RESTful Web服务。它提供了丰富的API...

    XFire建立Webservice实例,入门级别,适合初学者

    【XFire建立Webservice实例详解】对于初学者来说,理解并构建一个Web Service是一个重要的学习步骤,而XFire作为一款曾经流行的开源框架,提供了一种简单的方法来创建和部署Web Service。本文将详细介绍如何利用...

    webservices入门程序

    总之,“webservices入门程序”是一个涵盖了服务端开发(使用XFire)和客户端调用(利用Struts2)的实例,对于理解和实践Web服务开发有着重要的学习价值。通过这个项目,开发者可以学习到如何构建、部署Web服务,...

    cxf开发实例

    【CXF 开发实例详解】 CXF(CXF: Apache CXF)是一个开源的Java框架,主要用于构建和服务导向架构(SOA)。它提供了多种服务框架,包括Web服务和RESTful API,同时也支持JAX-WS和JAX-RS标准。CXF以其易用性和丰富的...

Global site tag (gtag.js) - Google Analytics