我最近几次一直在努力应对以下错误 你可以请几天帮忙!
我使用wsdl2java工具生成了我的服务器和客户端代码 wsdl 2.0文件。 在调用Web服务时,我收到以下错误:
org.apache.axis2.AxisFault: The endpoint reference (EPR) for the
Operation not found is
/axis2/services/MyService/authentication/?username=Denise345&password=xxxxx
and the WSA Action = null
我的服务显示在axis2网页上,包含所有可用方法。 这是TcpMon的输出
==============
Listen Port: 8090
Target Host: 127.0.0.1
Target Port: 8080
==== Request ====
GET /axis2/services/MyService/authentication/?username=Denise345&password=xxxxx
HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
SOAPAction: ""
User-Agent: Axis2
Host: 127.0.0.1:8090
==== Response ====
HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Content-Type: application/xml;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 12 May 2011 15:53:20 GMT
Connection: close
12b
<soapenv:Reason xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Text xml:lang="en-US">The endpoint reference (EPR) for the
Operation not found is
/axis2/services/MyService/authentication/?username=Denise345&password=xxxxx
and the WSA Action = null</soapenv:Text></soapenv:Reason>
0
==============
我正在使用:
请帮忙!
答案 0 :(得分:13)
在我的情况下,它是由HTTP POST中的错误Content-Type
引起的。将其设置为text/xml
解决了问题。
答案 1 :(得分:12)
尝试将?wsdl
添加到字符串中。
答案 2 :(得分:5)
正如Eran Chinthaka在http://wso2.com/library/176/
所描述的那样如果Axis2引擎无法找到消息的服务和操作, 它会立即失败,向发件人发送错误。如果没有服务 发现 - &#34;服务未找到EPR是&#34;如果 发现服务但不是操作 - &#34;操作未找到EPR和WSA行动=&#34;
在您的情况下,找到服务但操作没有。 Axis2引擎使用SOAPAction来计算所请求的操作,在您的示例中,缺少SOAPAction,因此我将尝试定义SOAPAction标头
答案 3 :(得分:5)
这是因为每个操作中的源WSDL都没有定义SOAPAction值。
e.g。
<soap12:operation soapAction="" style="document"/>
他对轴服务器很重要。
如果您已在netbeans或其他网站上创建了该服务,请不要忘记在标记@WebMethod上设置值操作
<强> e.g。 @WebMethod(action =&#34; hello&#34;,operationName =&#34; hello&#34;)
这将自己创建SOAPAction值。
答案 4 :(得分:4)
此错误即将发生,因为在调用服务时,它没有获取您的服务的wsdl文件。
jst检查你的服务的wsdl文件是否存在 - &gt;运行服务器并从浏览器运行本地主机上的第2轴应用程序并检查已部署的服务并单击您的服务,然后显示您的服务的wsdl文件.....或检查客户端文件中的服务路径。
我希望它可以帮助你解决问题...
答案 5 :(得分:2)
操作 null 表示在给定的SOAP消息(请求XML)中没有Action。您必须在SOAP调用之前设置Action:
java.net.URL endpoint = new URL("<URL>"); //sets URL
MimeHeaders headers = message.getMimeHeaders(); // getting MIME Header
headers.addHeader("SOAPAction", "<SOAP Action>"); //add Action To Header
SOAPMessage response = soapConnection.call(<SOAPMessage>, endpoint); //then Call
soapConnection.close(); // then Close the connection
答案 6 :(得分:2)
我使用curl发送soap请求也遇到了同样的问题。通过添加&#34; content-type:text / xml&#34;解决了这个问题。到http标题。
我希望这有助于某人。
答案 7 :(得分:1)
迟到的回答但是:
我看到你做了一个GET - 应该是一个帖子吗?
答案 8 :(得分:0)
尝试在通过客户端调用时删除操作名称(身份验证)之后的额外“/”
/axis2/services/MyService/authentication?username=Denise345&password=xxxxx
答案 9 :(得分:0)
似乎找不到wsdl文件..
我已经解决了在javax.jws.WebService annotation
答案 10 :(得分:0)
通过删除/ tmp文件夹中的缓存wsdl- *文件,我的问题已解决
请参阅https://www.drupal.org/node/1132926#comment-6283348
小心删除许可
我在ubuntu os
答案 11 :(得分:0)
在Websphere Application Server上,在相同的情况下,它有助于在服务器停止时删除Temp文件夹。
当服务包改变时,我遇到了这种情况。
答案 12 :(得分:0)
这可以通过禁用验证来解决
<proxy>
<!-- . . . -->
<parameter name="disableOperationValidation">true</parameter>
</proxy>
答案 13 :(得分:0)
打开WSDL文件并找到:
<soap:operation soapAction="[actionNameIsHere]" style="document"/>
添加到请求标头[请求发送到服务]:
'soapAction' : '[actionNameIsHere]'
这对我有用。
对于开发者。使用节点肥皂[https://github.com/vpulim/node-soap]-示例:
var soap = require('soap');
var options = {
...your options...
forceSoap12Headers: true
}
soap.createClient(
wsdl, options,
function(err, client) {
if(err) {
return callBack(err, result);
}
client.addHttpHeader('soapAction', '[actionNameIsHere]');
...your code - request send...
});