本文使用JAX-WS2.2编译webservice,并使用HttpUrlConnection的POST方式对wsdl发送soap报文进行请求返回数据,html
对错误Server returned HTTP response code: 500 的解决方法进行简单分析。java
因为课程须要博主须要本身写一个webservice而且经过soap进行请求,web
因而使用JAX-WS编译了下面java代码生成webservice服务数组
生成webservice的java代码:浏览器
查看webservice服务器
在网上查到的一个方法就是经过HttpUrlConnection进行请求,这边贴一下代码,应该不少人都有查到相似的方法app
HttpUrlConnection请求实现代码:url
soap.xml代码以下:spa
这段代码是网上找的,并无错误,可是一运行就懵逼了,报了下面的错误.net
明明直接在浏览器查看wsdl接口是能够访问页面,可是返回500错误
错误代码:
错误语句指向
而网上其余大部分文章都没有给解决方法,或者给了其余的解决方法,我就在这边分享一下这个问题的详细解决方法。
首先应该确认具体的错误,经过下面的语句能够了解InputStream的错误详情。
这个语句其实也是从请求的服务方取回的错误信息,实质也是xml内容,用上面的BufferReader那一连串的语句解析出具体内容,而后输出查看,具体代码以下:
错误详情输出以下:
在这边就要注意了!这个xml文件是第一个要点!
分析一下这段xml代码,能够看到有一个faultcode和faultstring,这就是解决这个问题的第一个突破口
灵光一闪百度了一下SOAP Fault(百科链接:http://baike.baidu.com/link?url=vehb23KNtl58uv2cwVDk8LYzDTUC4MHW9kmpaALl9qht9VXp8ASufe0QlpUrEELEApdKx80AMPzMsfCbUJtWiK)
这样就一目了然了,错误代码中faultcode所含的是Client,说明传递的消息有误,服务端是没有问题的。
因而从要发送的soap中查找错误。
这时候发现faultstring “{}找不到xxx的分派方法” 中有一个大括号,想不明白那个是什么,恰好查看了一下web服务的页面,就是最上面那张图片,发现服务名和端口名那边也有大括号{http://example/},而后也想起来以前看的其余xml代码中,要发送的方法的那个节点中有写命名空间(xmlns),就是网上那个getWeatherByCityName的那个例子,你们应该都有看过,我就再也不这边费口舌了。
要是有仔细看我发送的soap.xml的代码,就能够看到sayHelloWorldFrom那个节点没有写命名空间,实在是查了这么多代码网上都没人提到,也没有查到关于soap报文的编写规范,还觉得那边能够不用写,因而删掉了。
问题就出在这,我从新试了一下,先把命名空间随便写了个网址,再次运行后依然报错,可是大括号中就有了命名空间指向的网址了,因而把web服务里的大括号里的地址,即{http://example/}写上去,总算是请求成功并成功返回数据!
修改后的soap.xml(就是添加了命名空间)
大括号里的地址其实就是wsdl中denfinition里定义的targetNameSpace,具体解释我贴个连接吧你们本身看吧,反正知道问题出在这边总算是解决了。
WebService 之 WSDL文件 讲解 http://blog.itpub.net/20200170/viewspace-740276/
其实出了bug第一反应确实应该是找Error信息,这样才好针对性的进行处理,若是本文的方法还没办法帮你解决的话,那仍是建议你们靠前面查看错误详情的方法去进行bug的查找~
主要内容到这边结束啦,但愿能帮到你们~