一、编写服务端并发布
1、定义接口
public interface EchoService {
public String echo(String name);
}
2、接口实现
@WebService(name="wsecho",portName="echoServicePort", serviceName="echoService",targetNamespace="http://ws.logcd.net/")
@SOAPBinding(style = Style.DOCUMENT,use = Use.LITERAL)//Style.DOCUMENT为默认值
@HandlerChain(file="handle-chain.xml")
public class EchoServiceImpl implements EchoService{
@WebMethod()
public String echo(//指定参数名及命名空间
@WebParam(name="userName", targetNamespace="http://ws.logcd.net/") String name) {
return "hello, " + name;
}
}
3、处理用户身份认证类
public class AuthValidatorHandler implements SOAPHandler<SOAPMessageContext> {
public static final String TARGET_NAMESPACE = "http://ws.logcd.net/";
public static final String AUTH_HEADER_NAME = "AuthHeader";
public static final Map<String,String> cacheAcountMap = new HashMap<String,String>();
static{
cacheAcountMap.put("510028", "123456");
}
@SuppressWarnings("unchecked")
public boolean handleMessage(SOAPMessageContext ctx) {
Boolean isResponsed=(Boolean)ctx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if(!isResponsed){
SOAPMessage msg=ctx.getMessage();
try {
String id = "", pwd = "";
SOAPHeader header = msg.getSOAPHeader();
Iterator<SOAPHeaderElement> it = header.getChildElements(new QName(TARGET_NAMESPACE, AUTH_HEADER_NAME));
if(it.hasNext()){
SOAPHeaderElement headElem = (SOAPHeaderElement)it.next();
Iterator<SOAPElement> eleIt = headElem.getChildElements();
while(eleIt.hasNext()){
SOAPElement ele = eleIt.next();
String key = ele.getLocalName();
if(key.toUpperCase().equals("ACCOUNT")){
String val = ele.getValue();
String[] arr = val.split("/");
if(arr.length == 2){
id = arr[0];
pwd = arr[1];
}
break;
}
}
}
System.out.println("id="+id+",pwd="+pwd);
if(StringUtils.isEmpty(id) || StringUtils.isEmpty(pwd)){
throw new SOAPFaultException(new QName(TARGET_NAMESPACE, "-1"),
"User Acount Err!", "id or pwd is empty.", null);
}
return authValidate(id, pwd);
} catch (SOAPException e) {
throw new RuntimeException(e);
}
}
return false;
}
/*
* 验证用户名和密码
*/
private boolean authValidate(String id, String pwd){
if(cacheAcountMap.containsKey(id)
&& ((String)cacheAcountMap.get(id)).equals(pwd)){
return true;
}else{
throw new SOAPFaultException(new QName(TARGET_NAMESPACE, "-2"),
"Unauthorized Visit!", "id or pwd incorrect.", null);
}
}
@Override
public void close(MessageContext arg0) {
}
@Override
public boolean handleFault(SOAPMessageContext arg0) {
return false;
}
@Override
public Set<QName> getHeaders() {
return null;
}
}
4、请求处理链(handle-chain.xml)
<?xml version="1.0" encoding="UTF-8"?>
<javaee:handler-chains xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<javaee:handler-chain>
<javaee:handler>
<javaee:handler-class>com.cdmcs.jws.auth.AuthValidatorHandler</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>
5、发布WS服务
public class WSPublisher {
public static void main(String[] args){
Endpoint.publish("http://localhost:8099/echoService", new EchoServiceImpl());
System.out.println("publish all services...");
}
}
二、编写调用WS的客户端
public class Jdk6WsAxisClient {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8099/echoService";
String nameSpace = "http://ws.logcd.net/";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName(new QName(nameSpace, "echo"));
//参数名为WebParam中指定的参数名,未指定参数名时传arg0-argN
//call.addParameter("userName", XMLType.XSD_STRING, ParameterMode.IN); //Style.DOCUMENT,且方法参数没有指定命名空间或Style.RPC
call.addParameter(new QName(nameSpace, "userName"), XMLType.XSD_STRING, ParameterMode.IN);//Style.DOCUMENT指定了命名空间
call.setUseSOAPAction(true);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
call.setSOAPActionURI(nameSpace+"echoService");
SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(nameSpace, "AuthHeader");
soapHeaderElement.addChildElement("ACCOUNT").setValue("510028/123456");
call.addHeader(soapHeaderElement);
String result = (String) call.invoke(new Object[] {"frank"});
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
通过这个入门教程,你将了解如何使用JDK来开发Webservice,包括创建、发布、调用服务的基本步骤,以及理解相关的技术概念。实际操作中,你将学习到如何使用提供的示例代码来加深理解,并逐步熟悉整个流程,从而具备...
【描述】虽然描述信息为空,但通常在"WebService CXF 开发实战"的主题中,会涉及以下内容:首先,开发者会学习如何设置开发环境,包括安装必要的工具,如JDK、Maven或Gradle以及CXF库。然后,会深入理解CXF的工作...
标题 "JDK动态代理在EJB3(包括WebService)中的应用" 暗示了本文将探讨Java开发中的一种重要技术——JDK动态代理,以及它如何在企业级JavaBean (EJB) 3.x版本及其相关的Web服务实现中发挥作用。EJB3是Java EE平台的...
在描述中提到,“开发webservice的好工具”,暗示我们将探讨Axis如何简化Web服务开发流程。 **Web服务** 是一种通过互联网交换结构化信息的方式,它基于开放标准,如XML(可扩展标记语言)和WSDL(Web服务描述语言...
6. **安全功能**:CXF提供了全面的安全性支持,包括基于WS-Security的Web服务安全,OAuth,以及基本认证和证书认证等。 7. **扩展性**:CXF的插件架构允许开发者添加自定义行为、拦截器和数据绑定,以适应特定的...
使用JDK 6及以上版本是必要的,因为JAX-WS在这些版本中得到支持。以下是一个简单的示例: ```java package cn.itcast.server; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebService public ...
【使用XFire构建WebService(服务端及客户端)】 在Java Web开发中,WebService是一种常见的通信方式,用于不同系统之间的交互。XFire是一个轻量级的Java WebService框架,它简化了服务端和客户端的开发过程。本文...
本文将深入探讨如何利用CXF创建带有用户认证的Web服务接口,并将其与SSH(Spring、Struts、Hibernate)框架整合。 首先,让我们了解一下CXF创建Web服务的基本步骤: 1. **设置项目环境**:确保你的开发环境中已经...
3. JDK:Java 开发工具包,因为 Oracle Web Services 大多基于 Java 平台。 4. Internet 连接:用于访问外部 Web Service 提供商。 **简述** Oracle WebService 实例主要涉及以下几个步骤: 1. **发现 Web Service...
- 首先,确保你的开发环境已安装了JDK和Eclipse IDE。 - 下载Apache CXF库,包括CXF运行时和相关的依赖jar包。这些可以在CXF的官方网站上获取。 - 解压提供的"CXFCallWebservice"压缩包,其中包含了示例代码和...
RESTful风格的Web服务是一种基于HTTP协议,使用URI...在实际开发中,你可能需要处理更复杂的请求和响应,包括JSON数据交换、错误处理、认证和授权等。CXF提供了一系列的注解和扩展机制,帮助你构建功能丰富的REST服务。
集成Webservice平台,包括jaxws服务、CXF框架,配置双加密的权限认证。使服务集成更加安全。 9. Bootstrap html5提供了两套前台开环境,包括CMS和电子商务网站,使您的开发更加的简洁。 技术点: 1. Springmvc ...
- **系统环境**:首先确保你的开发环境是Windows操作系统,并安装了Java运行环境(JRE)和Java开发工具集(JDK),版本应与泛微Ecology兼容。 - **集成开发环境(IDE)**:推荐使用Eclipse或IntelliJ IDEA等支持Java开发...
【使用Axis自动生成WebService客户端代码】是Web服务开发中的一个重要步骤,它简化了与服务交互的复杂性。本文档主要介绍了如何在MyEclipse 7.0环境下利用Axis 1.4工具生成客户端代码,以便调用并测试Webservice。 ...
6. **使用TCPMonitor监控WebService SOAP消息** TCPMonitor是一个实用工具,用于监视和分析Web服务的SOAP消息。通过它,开发者可以查看请求和响应的详细信息,调试服务行为,检查消息格式是否正确,这对于调试和...
【搭建Axis的WebService】是IT领域中一个关于创建和部署基于Java的Web服务的重要实践过程。Axis是一个开源的Web服务工具包,它允许开发者利用Java技术快速构建和部署Web服务,支持SOAP、WSDL(Web服务描述语言)以及...
总的来说,"wsdl文件生成java webservice 工具"是一个实用的开发辅助工具,尤其适合初学者和开发者调试及学习Web服务。通过这个工具,可以快速地从WSDL文件生成Java代码,大大简化了Web服务的开发过程。只要遵循上述...
- **JDK 6**:Java开发工具包。 - **Eclipse 3.3 + MyEclipse 6**:集成开发环境,支持Java EE开发。 - **Oracle 10g**:关系型数据库管理系统。 - **PL/SQL Developer 7**:Oracle数据库的开发工具。 - **...
Apache CXF是一个开源框架,主要用于构建和开发Web服务。它提供了全面的支持,包括SOAP、RESTful API、WS-*标准和JAX-RS等,使得开发者能够轻松地创建、部署和管理高质量的Web服务。在本示例中,我们将探讨如何使用...