java 访问webservice接口_java访问WebService接口 | 学步园

本文记录了在使用Java访问WebService接口时遇到的三个主要问题:1)Saaj识别Content-Type错误,解决方案包括切换到SOAP 1.2或设置SoapAction;2)部署到服务器时出现的类路径问题,解决办法是删除服务器上的旧axis相关包并引入正确版本的SAAJ包;3)返回的SOAP消息中业务标签尖括号被转义,需要进行正确的XML解析处理。

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

前段时间做一个用户接口,对方提供WebService方式的接口供调用,记录遇到的几个问题

1、Soap1.1、Soap1.2与SoapAction

错误描述:用saaj访问axis2构建的WS,返回错误消息:

com.sun.xml.internal.messaging.saaj.soap.MessageImpl identifyContentType

严重: SAAJ0537: Invalid Content-Type. Could be an error message instead of a SOAP message

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl:java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:application/xml. Is this an error message instead of a SOAP response?

at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:146)

错误分析:返回的Soap消息的Content-Type是application/xml,saaj不识别此

Content-Type,认为返回的不是Soap响应

原因:1)客服端saaj能识别的Content-Type为text/xml和application/soap+xml

2)axis2返回的为application/xml,之所以返回此类型,是因为axis2根据请求类型返回不同Content-Type的内容,请求类型有soap1.1、soap1.2、REST

3)客户端发送请求时,发送soap1.1但是代码里MIME头未加SoapAction设置,axis2是通过SoapAction的指定区分Soap1.1与REST请求,这样请求被识别为REST,返回的content-tyee被设置为application/xml

解决方法:

1)使用soap1.2

MessageFactory mf = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL)

2)使用soap1.1并指定SoapAction

MessageFactory mf = MessageFactory.newInstance();

SOAPMessage msg = mf.createMessage();

msg.getMimeHeaders().addHeader("SOAPAction", Qns);

*REST(Representational State Transfer):表现性状态传输,与soap区别在于,提交请求直接用url+参数,返回结果为xml文档,不使用soap消息作为往返的信息载体,说是不只将http协议作为单纯的传输协议什么的,第一次听说这个概念,但实际上以前做Domino的时候经常用到,类似?readviewentries这样的扩展Url命令

*不单是axis2,只要使用soap1.1,则Soap请求消息的SoapAction都是必须指定的,否则会出错,SoapAction的值可以从服务的wsdl文档中查

2、部署碰到的问题

错误描述:本地测试通过,部署到服务器上出错

1)报不认SOAPConstants.SOAP_1_2_PROTOCOL常量,改成MF.newInstance()通过,可能和2)问题的原因一样

2)我想用的是Javax.xml.soap包下的类,但是似乎在服务器上执行都被识别指向成了org.apache.axis下的一些类而报异常,发现服务器以前有部署axis,把相关的包从服务器上删掉,并拷入sun的saaj相关的几个包,问题解决,网络上说jdk1.5以上直接支持saaj,是不是不要拷sun的saaj包可以直接用?

3、返回Soap消息处理

错误描述:测试时发现,返回的Soap消息,业务标签的尖括号都被转义,类似于:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值