webservice接口返回错误回滚

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webservice接口返回错误回滚相关的知识,希望对你有一定的参考价值。

我自己用java写了一个webservice的接口 正常情况可以调通并返回正确报文 如果接口中调用的子方法内如果出现错误 就throw到上一层主方法中 由主方法try-catch捕获后将错误信息组装成报文返回 但调用方法就收不到我返回的报文了 只能收到一个错误信息 以下是错误信息 请大神帮忙看看 我希望调用方法可以收到我返回的报文
org.codehaus.xfire.fault.XFireFault: Transaction rolled back because it has been marked as rollback-only
at org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(Soap11FaultSerializer.java:31)
at org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(SoapFaultSerializer.java:28)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:111)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.client.Client.onReceive(Client.java:406)
at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:139)
at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)
at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)
at org.codehaus.xfire.client.Client.invoke(Client.java:336)
at org.codehaus.xfire.client.Client.invoke(Client.java:368)
at com.sinosoft.intf.quotation.web.TestClient.main(TestClient.java:32)

我也遇到过这种情况,是你调用webservice服务端时,服务端的事务抛错引起的。我也没有找到原因,为了不让他报这个错,在webservice服务端的spring配置里,加“<property name="globalRollbackOnParticipationFailure" value="false" />”
参考:http://blog.csdn.net/waixin/article/details/6551457
参考技术A 你自己返回的,不是webservice的标准的,不认了。或者,不是调用的接口,也不认识的。

做得好,就在接口中定义返回是否正确、不正确的描述等信息追问

好像不是这样的 我昨天做了实验 子方法中报错 如果通过throws方式往上层抛异常就出出现上面描述的这种情况 但如果通过throw new Exception()这种方式 调用方就可以接收到我返回的报文 报文组织的都一样 原理不明~

webservice 调用接口返回值问题

webservice 中调用 另一个服务器接口 他的服务器return String 格式是300<response><result>0</result></response>我用的String 接收 只接受到了 <response><result>0</result></response> 上面的300 接收不到而且每次我关服务器的时候 会显示300<response><result>0</result></response

参考技术A 你的帖图里是200,不是300
根据这个贴图,我推测,这个200应该是http状态码,200表示成功,
http协议里200这个成功信息是放在响应头数据里,
<response><result>0</result></response>
才是服务器的响应内容,你接收时应该只取了响应内容,没有读取头信息,所以得不到200

事实上,所有的浏览器都只显示消息内容,不会去显示200这样的头信息的追问

哦。我第一次做,这个明白了 谢谢,重点是关闭服务器出的那些错误 有点不懂

参考技术B 上面的那个数字应该是HTTP的响应状态码吧,webservice的传输协议SOAP所使用的传输介质应该是一段儿完整的XML表达式才对。不应该会有未被XML标记包裹的表达式追问

对,是状态码, 哦,这个明白了 ,但是服务器关闭的时候会提示错误, 我调用的那个服务器的接口是吧XML 构造成 String 的 。。我用String 接收 为啥为出错呢

追答

这个问题没有碰到过,不过从异常信息来看,应该是某个后台线程在你服务器中断连接以后工作异常了。

参考技术C 你试试用Object接收之后再转换类型行不行追问

不行呢。开启服务没有错,可以将数据返回,重点是在关闭服务器的时候 报的错误,百度搜了没有相关的例子,
Unable to determine string representation of value of type [com.sun.xml.stream.writers.XMLStreamWriterImpl]
java.lang.UnsupportedOperationException

追答

你上面那一句报错的意思貌似是 无法确定类型的值的表示形式是字符串,你用Object接收它还是报这样的错吗?

追问

恩呢,用OB 接受 然后 转成 字符串输出的 还是这样子

追答

用Ob接收到的值是怎样的

追问

一样的 0 我觉得好像还有线程的错误。是不是执行完了HTTP 请求 没关闭呢 --

追答

那我也不知道了, 没碰到过这个问题,你问问给你接口的他们自己测试的时候有没有这个问题

追问

恩 谢谢你 这么耐心 我自己再看看吧

追答

不用,又没帮到忙

本回答被提问者采纳

以上是关于webservice接口返回错误回滚的主要内容,如果未能解决你的问题,请参考以下文章

nodejs调用webservice接口返回500是啥原因

WebServic调用天气预报服务

使用PostMan测试WebService接口

如何测试webservice接口

如何测试webservice接口

java如何调用webservice接口