JAX-WS手动配置实例

JAX-WS手动配置实例随着近几年来,SOA,EAI等架构体系的日渐成熟,Webservice越来越炽手可热,尤其是在企业做异质平台整合时成为了首选的技术。Java的Webservice技术更是层出不穷,比较流行的有:  Axis2,SpringWS以及Jaxws。   本人在日常工作和以往工程中,在使用了上述这些Webservice后进行了总结,比较,最终觉得jaxws是目前最标准,需要额外第三方插件

大家好,又见面了,我是你们的朋友全栈君。

    随着近几年来,SOA,EAI等架构体系的日渐成熟,Webservice越来越炽手可热,尤其是在企业做异质平台整合时成为了首选的技术。

Java的Webservice技术更是层出不穷,比较流行的有:

Axis2,Spring WS以及Jaxws。

    本人在日常工作和以往工程中,在使用了上述这些Webservice后进行了总结,比较,最终觉得jaxws是目前最标准,需要额外第三方插件最少,配置最少最灵活的webservice。

JAXWS适合几乎所有Webservice客户端的调用,因此不少巨头型的厂商如:IBM,Weblogic等,在他们的产品上都使用了以JAXWS为标准的Webservice接口。

 

下面就通过一个实例来走进jax-ws,先说说该实例的思路:

创建一个web项目少不了,因为webservice要通过web来访问。在服务器中加载该项目,启动服务器。

1、创建一个webservice接口:HelloWorld.java

2、开发其实现类:HelloWorldImpl.java,其中加入了客户端验证的功能。

3、以上两个创建好后,服务端的代码就完成了。再模拟一个webservice服务器,写一个java application,其实就是一个包含main函数的java类:Server.java

4、编写访问客户端:Client.java

代码如下:

HelloWorld.java

package com.ws;

import javax.jws.WebMethod;  
import javax.jws.WebService;  
import javax.jws.soap.SOAPBinding;  
import javax.jws.soap.SOAPBinding.Style;  
/**
 * @function webservice interface
 * @author WangYang
 * */

@WebService
@SOAPBinding(style = Style.RPC) 
public interface HelloWorld {
	@WebMethod  
	public String getHelloWorldMessage();  
	@WebMethod
	public String sayHello(String name);
}

 

HelloWorldImpl.java

package com.ws.impl;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

import com.ws.HelloWorld;

/**
 * Java6开发WebService入门
 * @author WangYang
 */
@WebService(endpointInterface = "com.ws.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
	@Resource
	WebServiceContext wsctx;
	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public String getHelloWorldMessage() {
		MessageContext mctx = wsctx.getMessageContext();
		// 取得报文头,解析头文件
		Map http_headers =
		(Map) mctx.get(
		MessageContext.HTTP_REQUEST_HEADERS);
		List<String> userList = (List) http_headers.get("Username");
		List<String> passList = (List) http_headers.get("Password");
		String username = "";
		String password = "";
		if (userList != null) {

			username = userList.get(0);
		}
		if (passList != null) {
			password = passList.get(0);
		}

		if (username.equals("test") && password.equals("password")) {
			return "Hello " + username +" to world of Jax WS - Valid User!";
		} else {
			return " User No Valid!";
		}
	}
	
	@Override
	public String sayHello(String name) {
		return "hello,"+name;
	}
	
}

Server.java

package com.ws.client;
import javax.xml.ws.Endpoint;

import com.ws.impl.HelloWorldImpl;

public class Server {
	  public static void main(String[] args){
	       Endpoint.publish("http://127.0.0.1:8080/baidumap/com.ws.HelloWorld", new HelloWorldImpl());
	   }
}

启动后,访问:http://127.0.0.1:8080/baidumap/com.ws.HelloWorld?wsdl

<?xml version="1.0" encoding="UTF-8"?>

<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. -->

<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. -->
-<definitions name="HelloWorldImplService" targetNamespace="http://impl.ws.com/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://impl.ws.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> <import location="http://127.0.0.1:8080/baidumap/com.ws.HelloWorld?wsdl=1" namespace="http://ws.com/"/> -<binding type="ns1:HelloWorld" name="HelloWorldImplPortBinding" xmlns:ns1="http://ws.com/"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> -<operation name="getHelloWorldMessage"> <soap:operation soapAction=""/> -<input> <soap:body namespace="http://ws.com/" use="literal"/> </input> -<output> <soap:body namespace="http://ws.com/" use="literal"/> </output> </operation> -<operation name="sayHello"> <soap:operation soapAction=""/> -<input> <soap:body namespace="http://ws.com/" use="literal"/> </input> -<output> <soap:body namespace="http://ws.com/" use="literal"/> </output> </operation> </binding> -<service name="HelloWorldImplService"> -<port name="HelloWorldImplPort" binding="tns:HelloWorldImplPortBinding"> <soap:address location="http://127.0.0.1:8080/baidumap/com.ws.HelloWorld"/> </port> </service> </definitions>

 

Client.java

package com.ws.client;
import java.net.URL;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Service;
import javax.xml.ws.handler.MessageContext;
import com.ws.HelloWorld;
public class Client {
	private static final String WS_URL = "http://127.0.0.1:8080/baidumap/com.ws.HelloWorld?wsdl";
	public static void main(String[] args) throws Exception {
		URL url = new URL(WS_URL);
		/**
		 * QName(String namespaceURI,String localPart)
		 * @param namespaceURI 此处参考发布的webservice里面的targetNameSpace
		 * @param localPart 此参数参考发布的webservice里面的service name
		 * */
		QName qname = new QName("http://impl.ws.com/", "HelloWorldImplService");
		Service service = Service.create(url, qname);
		HelloWorld hello = service.getPort(HelloWorld.class);
		/**
		 * @function 以下的代码为用户名验证代码
		 * */
		BindingProvider provider = (BindingProvider) hello;
		Map<String, Object> req_ctx = provider.getRequestContext();
		req_ctx.put(
		BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);
		// 调用的用户名和密码,用map
		Map<String, List<String>> headers = new HashMap<String, List<String>>();
		headers.put("Username", Collections.singletonList("test"));
		headers.put("Password", Collections.singletonList("password"));
		//将用户名和密码信息放到头部文件中
		req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
		/**
		 * @function 调用方法
		 * 
		 * */
		System.out.println(hello.getHelloWorldMessage());
		System.out.println(hello.sayHello("wzy"));
	}

}

输出结果:

Hello test to world of Jax WS - Valid User!
hello,wzy

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159702.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 计算机无法识别ANSI编码文件里的中文导致乱码「建议收藏」

    计算机无法识别ANSI编码文件里的中文导致乱码「建议收藏」问题现象最近远程协助一个用户的电脑(TeamView竟然连接不上,只好用QQ远程啦),原来ANSI编码的ini文件里的中文是正常的;用着用着,某一天就乱码了,无法识别ANSI编码文件里的中文。创建ANSI编码的ini配置文件,输入中文后保存会提示“…该文件有Unicode格式的字符,当文件保存为ANSI编码的文本时,该字符将丢失…”的问题。原因Unicode和ANSI是两种不同的字符编…

  • 简述MD5加密[通俗易懂]

    简述MD5加密[通俗易懂]MD5加密publicclassMD5{ /**四个链接变量标准幻数(按大端字节序存储-高位字节排放在内存的低地址端(即该值的起始地址),低位字节排放在内存的高地址端)*/privatefinalintA=0x67452301;//01234567privatefinalintB=0xefcdab89;//89abcdef…

  • 51单片机之红外通信原理图_单片机红外通信原理

    51单片机之红外通信原理图_单片机红外通信原理红外通信基础

    2022年10月23日
  • 阿里云ssl证书过期_阿里云acp证书含金量

    阿里云ssl证书过期_阿里云acp证书含金量阿里云提示内容如下:【阿里云】尊敬的:您域名com使用的SSL证书cert-还有1天过期,过期时间2021-04-21。为防止业务受影响,请提前5个工作日续费并更新证书。请尽快登陆控制台处。这是阿里云的SSL证书产品的到期通知,SSL证书主要用于HTTPS加密协议场景包括,电子商务、微信小程序、微信公众号、APP、公司网站等。SSL证书到期后会让对应的项目立即暂停服务,比如微信小程序就会立即停止服务,用户不能正常使用小程序,其它的场景也一样,所以SSL证书到期之前必须要尽快办理续费!SSL证

  • redis客户端连接(error) NOAUTH Authentication required「建议收藏」

    redis客户端连接(error) NOAUTH Authentication required「建议收藏」redis客户端连接成功,但是操作报异常——(error)NOAUTHAuthenticationrequired错误的含义是说你没有认证,说明没有使用密码连接查看密码:进入redis的安装目录(是安装目录的),查看redis.config文件viredis.config打开配置文件后,输入#requirepassfoobared(快速定位的命令)然后回车红框里的就是密码使用密码连接.

  • 新装的CentOS 7安装python3[通俗易懂]

    新装的CentOS 7安装python3[通俗易懂]centos7自带有python,但是确实python2版本的python,如果你想安装个python3怎么办呢?难道要从github上把源码clone下来进行编译安装么?这么做对于我们个人用户来说,完全没必要嘛。1.首先,你要知道系统现在的python的位置在哪儿:[root@root~]#whereispythonpython:/usr/bin/python2.7/

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号