测试环境jdk1.6。
IFruitMgtService.java
package service;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface IFruitMgtService {
public static final String APPLE="apple";
public static final String ORANGE="orange";
public static final String PLUM="plum";
public Double getPrice(String fruitName);
}
FruitMgtServiceImpl.java
package service.impl;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import service.IFruitMgtService;
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class FruitMgtServiceImpl implements IFruitMgtService {
@WebMethod
@Override
public Double getPrice(String fruitName) {
if(APPLE.equals(fruitName)){
return 5d;
}else if(ORANGE.equals(fruitName)){
return 10d;
}else if(PLUM.equals(fruitName)){
return 20d;
}else {
throw new RuntimeException("Sorry,can not calculate the fruit price!");
}
}
}
ClientFactory.java
package util;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import service.IFruitMgtService;
public class ClientFactory extends Service{
private static String NAME_SPACE_URL="http://impl.service/";
private static URL WSDL_DOCUMENT_LOCATION=null;
private static QName serviceName=new
QName(NAME_SPACE_URL,"FruitMgtServiceImplService");
static{
try {
WSDL_DOCUMENT_LOCATION = new
URL("http://localhost:8888/JDK/FruitMgtService?wsdl");
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
private static ClientFactory instance=new
ClientFactory(WSDL_DOCUMENT_LOCATION,serviceName);
protected ClientFactory(URL wsdlDocumentLocation, QName serviceName) {
super(wsdlDocumentLocation, serviceName);
}
public static IFruitMgtService getFruitMgtService(){
return instance.getPort(
new QName(NAME_SPACE_URL,"FruitMgtServiceImplPort"),IFruitMgtService.class);
}
}
发布webservice测试代码
JDKServerMain.java
package main;
import service.impl.FruitMgtServiceImpl;
import com.sun.xml.internal.ws.transport.http.server.EndpointImpl;
public class JDKServerMain {
public static void main(String[] args) {
EndpointImpl.publish("http://localhost:8888/JDK/FruitMgtService",
new FruitMgtServiceImpl());
}
}
客户端调用webservice测试代码
JDKClientMain.java
package main;
import service.IFruitMgtService;
import util.ClientFactory;
public class JDKClientMain {
public static void main(String[] args) throws Exception {
IFruitMgtService fruitMgtService= ClientFactory.getFruitMgtService();
System.out.println(fruitMgtService.getPrice(IFruitMgtService.APPLE));
}
}
Note:IFruitMgtService.java和FruitMgtServiceImpl.java中有相同注解@SOAPBinding(style = SOAPBinding.Style.RPC)。注意2处注解的style属性必须相同。这里style都为SOAPBinding.Style.RPC。如果将style设为SOAPBinding.Style.DOCUMENT则还要进行以下处理
1)用dos切换到classes目录启用wsgen
wsgen -wsdl -keep -cp . service.impl.FruitMgtServiceImpl
在classes/service/impl中生成
jaxws/GetPrice.class
jaxws/GetPrice.java
jaxws/GetPriceResponse.class
jaxws/GetPriceResponse.java
将jaxws/GetPrice.java和jaxws/GetPriceResponse.java拷贝到src/service
纠正编译错误
2)修改IFruitMgtService.java。设置WebService注解的targetNamespace属性如下:
@WebService(targetNamespace="http://impl.service/")
再次运行JDKClientMain.java可以成功获得结果。
记注:在接口上和实现类上的注解SOAPBinding的style属性必须一致。
SOAPBinding.Style.DOCUMENT SOAPBinding.Style.RPC区别:
当使用SOAPBinding.Style.RPC时,不需要一些额外处理(如上所述)。同时,如果通过wsgen对SOAPBinding.Style.RPC的Endpoint处理时,不会生成jaxws/...相关文件
当使用SOAPBinding.Style.DOCUMENT时,需要一些额外处理(如上所述)。同时,如果通过wsgen对SOAPBinding.Style.DOCUMENT的Endpoint处理时,会生成jaxws/...相关文件
分享到:
相关推荐
在JDK 1.6中,开发者可以利用JAX-WS轻松地创建服务提供者接口(SPI),并自动生成客户端存根代码,从而实现服务的发布和调用。 3. **Java Architecture for XML Binding (JAXB)**:JAXB是Java中用来将XML数据与Java...
### JAVA1.6的WebService支持详解 #### 一、引言 随着企业级应用的不断发展,服务导向架构(SOA, Service-Oriented Architecture)逐渐成为软件设计与开发领域的重要概念。SOA通过定义一系列标准的服务接口,使得不同...
JDK 6引入了JAX-WS(Java API for XML Web Services),它是一个标准的、基于注解的框架,简化了Web Service的开发流程。以下是对标题和描述中涉及的知识点的详细说明: 1. **JAX-WS**: JAX-WS是Java平台的一个核心...
JDK 1.6引入了许多新特性,显著提高了Java开发的效率和灵活性。以下是对这些特性的详细解释: 1. **Web服务元数据** (JSR 181): 这一特性允许开发者使用注解(Annotation)来声明Web服务的方法、参数和返回值,简化...
jdk6下开发webservice示例,JDK1.6 自带webservice构建,jdk6原生态webservice
在 JDK 1.6 版本中,注解的引入极大地简化了 Web 服务的开发,使得开发者能够更高效地创建、部署和管理 Web 服务。 `@WebService` 是 Java Web Services (JAX-WS) 中的一个核心注解,用于声明一个类或接口作为 Web ...
Java 基于第三方插件实现WebService实在麻烦,尤其是要添加几十M的Jar包...还好,自从JDK 1.6开始,Java自身已经支持WebSeervice的开发即JAX-WS,附件是一个简单的示例,供入门参考。注意,JDK环境要求1.6及以上版本。
(此方式只能作为调试,有以下bug:jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在service接口和实现类添加“@SOAPBinding(style = SOAPBinding.Style.RPC)”注解; 访问受限,...
而"jdk版本必须大于1.6"则意味着该项目依赖于Java Development Kit的特定版本,因为CXF通常需要JDK 1.6或更高版本以提供其功能。 在实际操作中,首先你需要确保安装了符合要求的JDK并配置好环境变量。接着,为了...
5. **注意兼容性**:根据描述,本教程适用于JDK 1.6或更高版本。请确保你的开发环境和目标运行环境都满足这个要求。 在提供的压缩包文件“webService服务接口方案”中,可能包含了具体的代码示例、配置文件和其他...
android SDK(4.0以上) + jdk1.6 下载adt-bundle-windows-x86_64-20131030.zip 64bit机器 APP英文名:FoodSupply 32bit另有相应版本 APP包名:com.stsol.foodsupply APP数据库名...
在JDK1.6版本以后,在<JAVA_HOME>/bin目录下有一个wsimport.exe工具,该工具可以根据wsdl文件自动生成webservice接口调用的java客户端代码,十分方便。而自己仅需要写一个测试类。 使用过程如下: 1. 获取...
在开发webService之前,需要安装相关的软件环境,包括windowXP、eclipse3.7、tomcat7、jdk1.6和CXF2.4.3等。首先,需要从eclipse官方网站下载eclipse的安装包,并解压缩。然后,从apache官网下载CXF插件,包括apache...
NULL 博文链接:https://ligaosong.iteye.com/blog/2356346
实验“第三次实验1”主要涉及Web Service的开发,特别是基于JAX_WS包和JDK1.6+版本的实现。Web Service是一种通过网络提供服务的方式,它基于开放标准,允许不同系统之间的数据交换。本实验的目标是理解Web Service...
使用jdk1.6、cxf2.3和tomcat开发的一个关于验证码的webservice接口,主要实现对手机验证码的验证。
3. **JDK1.6**: Java Development Kit (JDK) 是Java开发的必备工具集,包括Java编译器、JRE(Java Runtime Environment)以及各种开发工具。JDK1.6是本教程中使用的Java版本,支持Java Web Service的开发。 4. **...
3. JAX-RS(Java API for RESTful Web Services):JAX-RS是为REST风格的Web服务制定的规范,它较晚推出,并且不随JDK1.6一起发行,需要单独下载。JAX-RS的目标是简化Web服务的构建过程。 Apache CXF是实现上述规范...
然后,将WebService接口和实现添加到该项目,并配置服务发布。 4. **生成WSDL**:JAX-WS会自动生成一个WSDL(Web Services Description Language)文件,该文件描述了服务的接口和操作,客户端可以使用它来调用服务...