webservice开发

1 webservice开发规范

JAVA 中共有三种WebService规范,分别是JAXM & SAAJJAX-WS(JAX-RPC)JAX-RS

1.1 JAX-WS

JAX-WS(Java API For XML - WebService),JDK1.6 自带的版本为JAX-WS2.1,其底层支持为JAXB。JAX-WS(JSR 224)规范的API 位于javax.xml.ws.*包,其中大部分都是注解,提供API 操作Web 服务(通常在客户端使用的较多,由于客户端可以借助SDK 生成,因此这个包中的API 我们较少会直接使用)。

1.2 JAXM & SAAJ

JAXM(JAVA API For XML Message)主要定义了包含了发送和接收消息所需的API,相当于Web 服务的服务器端,其API 位于javax.messaging.*包,它是JAVA EE 的可选包,因此你需要单独下载。
SAAJ(SOAP With Attachment API For JavaJSR 67)是与JAXM 搭配使用的API,为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输,它在服务器端、客户端都需要使用。这里还要提到的是SAAJ 规范,其API 位于javax.xml.soap.*包。
JAXM & SAAJ 与JAX-WS 都是基于SOAP 的Web 服务,相比之下JAXM&SAAJ暴漏了SOAP更多的底层细节,编码比较麻烦,而JAX-WS 更加抽象,隐藏了更多的细节,更加面向对象,实现起来你基本上不需要关心SOAP 的任何细节。那么如果你想控制SOAP 消息的更多细节,可以使用JAXM&SAAJ,目前版本为1.3。

1.3 JAX-RS:

JAX-RS 是JAVA 针对REST(RepresentationState Transfer)风格制定的一套Web 服务规范,由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行,你需要到JCP 上单独下载JAX-RS 规范的接口,其API 位于javax.ws.rs.*包。
这里的JAX-WSJAX-RS 规范我们采用 Apache CXF 作为实现,CXF 是 Objectweb Celtix 和 Codehaus XFire 合并而成。CXF 的核心是org.apache.cxf.Bus(总线),类似于Spring 的ApplicationContext,Bus 由BusFactory 创建,默认是SpringBusFactory 类,可见默认CXF是依赖于Spring 的,Bus 都有一个ID,默认的BUS 的ID 是cxf。你要注意的是Apache
CXF2.2 的发行包中的jar 你如果直接全部放到lib 目录,那么你必须使用JDK1.6,否则会报JAX-WS 版本不一致的问题。对于JAXM & SAAJ 规范我们采用JDK 中自带的默认实现。

2 webservice落地实现

2.1 ApacheCXF实现webservice(jax-ws)

服务端代码

package com.michael.ws.service;
import javax.jws.WebService;

@WebService
public interface UserService {
	public String sayHi(String name);
}

==================================================
package com.michael.ws.service.impl;
import com.michael.ws.service.UserService;

public class UserServiceImpl implements UserService {
	@Override
	public String sayHi(String name) {
		return "Hi," + name + ",Welcome to BeiJing!";
	}
}

==================================================
package com.michael.ws;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import com.michael.ws.service.impl.UserServiceImpl;

public class Server {
	public static void main(String[] args) {
		// 服务工厂
		JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
		// 设置服务地址
		factory.setAddress("http://localhost:8000/user");
		// 设置服务类
		factory.setServiceBean(new UserServiceImpl());
		// 添加日志输入输出拦截器
		factory.getInInterceptors().add(new LoggingInInterceptor());
		factory.getOutInterceptors().add(new LoggingOutInterceptor());
		// 发布服务
		factory.create();
		// 提示
		System.out.println("服务端启动");
	}
}

客户端代码

package com.michael.ws.service;
import javax.jws.WebService;

@WebService
public interface UserService {
	public String sayHi(String name);
}

==================================================
package com.michael.ws;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.michael.ws.service.UserService;

public class Client {
	public static void main(String[] args) {
		JaxWsProxyFactoryBean proxyFactoryBean = new JaxWsProxyFactoryBean();
		proxyFactoryBean.setAddress("http://localhost:8000/user?wsdl");
		proxyFactoryBean.setServiceClass(UserService.class);
		UserService userService = proxyFactoryBean.create(UserService.class);
		String result = userService.sayHi("Linux");
		System.out.println("result = " + result);
	}
}

webservice文档

调用服务端结果 记得添加log4j.properties

2022-06-16 23:01:00,123 11573  [tp2017085051-18] INFO  serServiceImplPort.UserService  - Inbound Message
----------------------------
ID: 1
Address: http://localhost:8000/user?wsdl
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml; charset=UTF-8
Headers: {
			Accept=[*/*], 
			Cache-Control=[no-cache], 
			connection=[keep-alive], 
			Content-Length=[193], 
			content-type=[text/xml; charset=UTF-8], 
			Host=[localhost:8000], 
			Pragma=[no-cache], 
			SOAPAction=[""], 
			User-Agent=[Apache CXF 3.0.1]
		}
Payload: 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Body>
		<ns2:sayHi xmlns:ns2="http://service.ws.michael.com/">
			<arg0>Linux</arg0>
		</ns2:sayHi>
	</soap:Body>
</soap:Envelope>
--------------------------------------
2022-06-16 23:01:00,247 11697  [tp2017085051-18] INFO  serServiceImplPort.UserService  - Outbound Message
---------------------------
ID: 1
Response-Code: 200
Encoding: UTF-8
Content-Type: text/xml
Headers: {}
Payload: 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Body>
		<ns2:sayHiResponse xmlns:ns2="http://service.ws.michael.com/">
			<return>Hi,Linux,Welcome to BeiJing!</return>
		</ns2:sayHiResponse>
	</soap:Body>
</soap:Envelope>
--------------------------------------


调用客户端结果

2.2 Spring整合CXF实现WS(jax-ws)

2.3 ApacheCXF实现webservice(jax-rs)

2.4 Sping整合CXF实现Restful风格WS(jax-rs)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用友U8 API接口是用友公司为了方便开发者与U8软件进行数据交互而提供的一套接口。通过使用U8 API接口,开发者可以实现与U8软件的对接,并实现各种功能的扩展和自定义。 在使用U8 API接口进行WebService开发时,可能会遇到一些常见问题: 1. 接口调用问题:在使用U8 API接口时,需要正确传入参数,并按照接口规范进行调用。如果出现调用失败的情况,可以通过查看接口的返回信息和错误提示进行排查。 2. 权限设置问题:在使用U8 API接口时,需要确保当前用户具有接口所需的权限。如果出现权限不足的情况,需要在U8软件中相应设置。 3. 数据映射问题:在进行数据交互时,需要将U8软件中的数据与外部系统的数据进行映射。在进行数据映射时,需要注意各字段的对应关系,确保数据的准确传递。 4. 并发冲突问题:在多个请求同时访问U8 API接口时,可能会出现并发冲突的问题。为了避免数据错乱或丢失,可以使用事务管理和锁机制来解决并发冲突问题。 5. 接口升级问题:随着U8软件的版本迭代,U8 API接口可能会发生变化。在进行接口开发时,需要关注U8软件的版本和相应的接口文档,确保使用最新的接口版本。 总之,使用用友U8 API接口进行WebService开发时,需要注意接口调用、权限设置、数据映射、并发冲突和接口升级等问题。通过仔细分析和排查,可以解决相关问题,实现与U8软件的灵活对接和功能扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值