java访问WebService接口

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

1Soap1.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-Typeapplication/xmlsaaj不识别此

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

原因:1) 客服端saaj能识别的Content-Typetext/xmlapplication/soap+xml

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

3)       客户端发送请求时,发送soap1.1但是代码里MIME头未加SoapAction设置,axis2是通过SoapAction的指定区分Soap1.1REST请求,这样请求被识别为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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java访问WebService接口的方法有很多种,下面我来介绍一种常用的方法。 Java通过SOAP协议来访问WebService接口,首先需要在项目中引入相关的依赖库,如Apache Axis、Apache CXF等,这些库提供了一些工具类和方法,方便我们使用SOAP协议进行通信。 接下来,我们需要创建一个客户端来调用WebService接口。首先,需要通过WSDL文件生成客户端代码,可以使用Apache Axis提供的工具来生成。生成代码后,我们就可以使用该代码来调用WebService接口了。 在调用WebService接口之前,我们需要创建一个客户端实例。可以通过调用生成的代码中的构造方法来创建。然后,通过该客户端实例,我们就可以调用接口中的各个方法了。 在调用方法之前,我们需要先构造请求报文。根据接口的要求,可以通过设置参数或构建请求数据等方式来构造请求报文。 最后,调用接口方法并获取返回结果。调用方法时,我们需要将构造好的请求报文传入,并获取返回结果,可根据接口定义的返回数据结构来处理返回结果。 需要注意的是,调用WebService接口需要保证接口的可用性,网络连接的可靠性,以及接口的权限等方面的问题。如果出现异常,可以通过日志记录和异常捕获等方式来进行处理。 以上是一种常用的Java访问WebService接口的方法,当然还有其他的方法,可以根据具体的需求进行选择和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值