使用CXF做 webservice 简单例子

本文介绍如何使用注解创建独立启动的WebService,并将其集成到Spring框架中。通过具体步骤展示了服务接口、实现类、实体类的编写过程,以及如何通过配置文件在Spring环境中部署和访问该服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 借助 annotation 创建独立启动的web 服务。

          准备: 新建工程 导入需要的jar 包35个,如图:

        1、 首先服务点接口。

package com.longlong.twsserver;

import java.util.List;

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

import com.longlong.twsserver.domain.User;

@WebService
public interface  HelloWorld {
	String sayHi(@WebParam(name="text")String text);
    String sayHiToUser(User user);
    String[] SayHiToUserList(List<User> userList);
}
        2、 服务点实现。

package com.longlong.twsserver.impl;

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

import javax.jws.WebService;

import com.longlong.twsserver.HelloWorld;
import com.longlong.twsserver.domain.User;

@WebService(endpointInterface="com.longlong.twsserver.HelloWorld",serviceName="helloWorld")
public class HelloWorldImpl implements HelloWorld{

	Map<Integer, User> users = new LinkedHashMap<Integer, User>();

	 
    public String sayHi(String text) {
                return "Hello " + text;
   }
   public String sayHiToUser(User user) {
             users.put(users.size()+1, user);
             return "Hello "+ user.getName();
   }
   public String[] SayHiToUserList(List<User> userList) {
             String[] result = new String[userList.size()];
             int i=0;
             for(User u:userList){
                  result[i] = "Hello " + u.getName();
                  i++;
             }
     return result;
   }
}
        3、 实体。
package com.longlong.twsserver.domain;

public class User {
	private String id;
	private String name;
	private String description;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
}	
        4、 编写 WebServiceApp.java类来暴露 web服务。

package com.longlong.twsserver.server;

import javax.xml.ws.Endpoint;

import com.longlong.twsserver.impl.HelloWorldImpl;

public class WebServiceApp {
	public static void main(String[] args) {
		System.out.println("web service start");
		HelloWorldImpl implementor = new HelloWorldImpl();
		String address = "http://localhost:8080/helloWorld";
		Endpoint.publish(address, implementor);
		System.out.println("web service started");
	}
}

        5、run WebServiceApp.java 类来启动服务。 访问 http://localhost:8080/helloWorld?wsdl  查看是否显示wsdl。


6、编写客户端访问服务。
package com.longlong.twsserver.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.longlong.twsserver.HelloWorld;
import com.longlong.twsserver.domain.User;

public class HelloWorldClient {
	public static void main(String[] args) {
		JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
		svr.setServiceClass(HelloWorld.class);
		svr.setAddress("http://localhost:8080/helloWorld");
		HelloWorld hw = (HelloWorld) svr.create();
		User user = new User();
		user.setName("Tony");
		user.setDescription("test");
		System.out.println(hw.sayHiToUser(user));
	}
}

7、测试: run WebServiceApp.java 类来启动服务,然后 run HelloWorldClient.java 来访问服务。

二 集成到spring 中。

           1.web.xml中加入如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			WEB-INF/classes/applicationContext.xml
		</param-value>
	</context-param>

	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

	<servlet>
		<servlet-name>CXFServlet</servlet-name>
		<display-name>CXFServlet</display-name>
		<servlet-class>
			org.apache.cxf.transport.servlet.CXFServlet
		</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/webservice/*</url-pattern>
	</servlet-mapping>
</web-app>

         2.在src/目录下加入 applicationContext.xml 配置文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans.xsd
                       http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

	<jaxws:endpoint id="helloWorld"
		implementor="com.longlong.twsserver.impl.HelloWorldImpl" address="/helloWorld" />

	<bean id="client" class="com.longlong.twsserver.HelloWorld"
		factory-bean="clientFactory" factory-method="create" />

	<bean id="clientFactory"
		class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
		<property name="serviceClass" value="com.longlong.twsserver.HelloWorld" />
		<property name="address"
			value="http://localhost:8080/TWSServer/webservice/helloWorld?wsdl" />
	</bean>
</beans>

         3  修改客户端。

package com.longlong.twsserver.client;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebService;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.longlong.twsserver.HelloWorld;
import com.longlong.twsserver.domain.User;

public class HelloWorldClient {
	public static void main(String[] args) {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		HelloWorld client = (HelloWorld) context.getBean("client");
		User user1 = new User();
		user1.setName("Tony");
		user1.setDescription("test");
		User user2 = new User();
		user2.setName("freeman");
		user2.setDescription("test");
		List<User> userList = new ArrayList<User>();
		userList.add(user1);
		userList.add(user2);
		String[] res = client.sayHiToUserList(userList);
		System.out.println(res[0]);
		System.out.println(res[1]);

	}
}

           4  发布工程 启动web服务器(我用 tomcat 6)。 

           5 访问 http://localhost:8080/TWSServer/webservice/helloWorld?wsdl  查看是否显示 wsdl 。 

           6  run run HelloWorldClient.java 来访问服务。



内容概要:论文提出了一种基于空间调制的能量高效分子通信方案(SM-MC),将传输符号分为空间符号和浓度符号。空间符号通过激活单个发射纳米机器人的索引来传输信息,浓度符号则采用传统的浓度移位键控(CSK)调制。相比现有的MIMO分子通信方案,SM-MC避免了链路间干扰,降低了检测复杂度并提高了性能。论文分析了SM-MC及其特例SSK-MC的符号错误率(SER),并通过仿真验证了其性能优于传统的MIMO-MC和SISO-MC方案。此外,论文还探讨了分子通信领域的挑战、优势及相关研究工作,强调了空间维度作为新的信息自由度的重要性,并提出了未来的研究方向和技术挑战。 适合人群:具备一定通信理论基础,特别是对纳米通信和分子通信感兴趣的科研人员、研究生和工程师。 使用场景及目标:①理解分子通信中空间调制的工作原理及其优势;②掌握SM-MC系统的具体实现细节,包括发射、接收、检测算法及性能分析;③对比不同分子通信方案(如MIMO-MC、SISO-MC、SSK-MC)的性能差异;④探索分子通信在纳米网络中的应用前景。 其他说明:论文不仅提供了详细的理论分析和仿真验证,还给出了具体的代码实现,帮助读者更好地理解和复现实验结果。此外,论文还讨论了分子通信领域的标准化进展,以及未来可能的研究方向,如混合调制方案、自适应调制技术和纳米机器协作协议等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值