加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

【JAX-WS入门系列】第01章_HelloWorld

发布时间:2020-12-17 00:24:46 所属栏目:安全 来源:网络整理
导读:This is ?the Java Project 首先是SEI,即服务端接口类HelloService.java package com.jadyer.service;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;/** * SEI(Service Endpoint Interface) * @see -----------------

This is ?the Java Project



首先是SEI,即服务端接口类HelloService.java

package com.jadyer.service;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

/**
 * SEI(Service Endpoint Interface)
 * @see -------------------------------------------------------------------------------------------
 * @see 这里使用类级别注解@WebService是为了标注该接口的方法将公开为Web服务
 * @see 它默认会公开所有方法,若想屏蔽某个方法,可以使用@Method的exclude=true属性
 * @see -------------------------------------------------------------------------------------------
 * @see 默认的生成的wsdl中方法参数名是arg0,arg1,返回值是return
 * @see 这样很不便于观察,所以我们可以使用@WebResult和@WebParam注解
 * @see @WebResult和@WebParam可以指定生成的wsdl文件中的方法参数名和返回值
 * @see -------------------------------------------------------------------------------------------
 * @see 这里要注意:如果一个WebServices服务已经发布,再来修改服务细节,如方法参数名和返回值
 * @see 尽管没有修改方法内部逻辑,但再重新发布完服务后,相应的客户端也要做修改,如重新wsimport本地类
 * @see 这是因为wsdl文件已被修改(尽管改的只是参数名字),而客户端所请求的wsdl与新wsdl在内容上是不同的
 * @see 若客户端未重新wsimport,会导致请求服务成功(实际是假象的成功)但得不到正确的结果
 * @see 所以服务一旦发布就不要轻易修改
 * @see -------------------------------------------------------------------------------------------
 * @create Mar 17,2013 12:11:24 AM
 * @author 玄玉<http://blog.csdn/net/jadyer>
 */
@WebService
public interface HelloService {
	@WebResult(name="addResult")
	public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);
	
	@WebResult(name="sayHelloResult")
	public String sayHello(@WebParam(name="name")String name);
}

然后是SIB,即服务端接口实现类HelloServiceImpl.java

package com.jadyer.service;

import javax.jws.WebService;

/**
 * SIB(Service Implemention Bean)
 * @see -----------------------------------------------------------------------------------------------
 * @see 如果该实现类还实现了其它接口,那么就需要在@WebService上使用endpointInterface指定SEI
 * @see 如@WebService(endpointInterface="com.jadyer.service.HelloService")
 * @see 有一个比较奇怪的现象是,本例中如果没有加endpointInterface属性,那么SEI中的@WebParam会失效
 * @see 这是因为endpointInterface属性的作用之一是让SEI中配置的注解生效,不过我们也可以在SIB中直接注解
 * @see -----------------------------------------------------------------------------------------------
 * @create Mar 17,2013 12:11:24 AM
 * @author 玄玉<http://blog.csdn/net/jadyer>
 */
@WebService(endpointInterface="com.jadyer.service.HelloService")
public class HelloServiceImpl implements HelloService {
	@Override
	public int add(int a,int b) {
		System.out.println(a + "+" + b + "=" + (a+b));
		return a+b;
	}

	@Override
	public String sayHello(String name) {
		System.out.println("Receive the name=[" + name + "]");
		if(null==name){
			return "Hello,World";
		}else{
			return "Hello," + name;
		}
	}
}

最后是用于发布服务的MainApp.java

package com.jadyer.server;

import javax.xml.ws.Endpoint;

import com.jadyer.service.HelloServiceImpl;

/**
 * 基于JAX-WS的WebServices入门
 * @see JAX-WS(Java API for XML Webservices)
 * @see -------------------------------------------------------------------------------------------------
 * @see 两个常见的名词SEI和SIB
 * @see SEI(Service Endpoint Interface)--服务提供的接口,本例中指的就是HelloService.java
 * @see SIB(Service Implemention Bean)---服务实现的Bean,本例中指的就是HelloServiceImpl.java
 * @see -------------------------------------------------------------------------------------------------
 * @create Mar 16,2013 10:04:52 PM
 * @author 玄玉<http://blog.csdn/net/jadyer>
 */
public class MainApp {
	public static void main(String[] args) {
		//发布服务,需指定发布的服务地址和实现类
		//运行该类后,服务就发布出去了,然后浏览器访问http://127.0.0.1:8888/myHelloService?wsdl即可
		Endpoint.publish("http://127.0.0.1:8888/myHelloService",new HelloServiceImpl());
	}
}

好了,至此服务端发布完毕


我们在该Java Project上写一个Client测试一下

注意:这里ClientApp只是用于测试,实际用处不怎么大


更加好用的客户端处理方式,详见http://blog.csdn.net/jadyer/article/details/8692108

package com.jadyer.client;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import com.jadyer.service.HelloService;

public class ClientApp {
	public static void main(String[] args) throws MalformedURLException {
		//创建访问WSDL服务地址的URL
		URL url = new URL("http://127.0.0.1:8888/myHelloService?wsdl");
		//通过QName指明服务的具体信息
		//两个参数分别为WSDL文件顶部的<definitions targetNamespace="" name="">的值
		QName qname = new QName("http://service.jadyer.com/","HelloServiceImplService");
		//创建服务
		Service service = Service.create(url,qname);
		//实现接口
		HelloService hello = service.getPort(HelloService.class);
		//美中不足的是,这里客户端要依赖于服务端的接口类
		//更加好用的客户端处理方式,详见http://blog.csdn.net/jadyer/article/details/8692108
		System.out.println(hello.add(2,6));
		System.out.println(hello.sayHello("Jadyer"));
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读