未找到操作的端点引用(EPR)是

时间:2011-05-12 16:36:35

标签: wsdl axis2

我最近几次一直在努力应对以下错误 你可以请几天帮忙!

我使用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

==============

我正在使用:

  • axis2-1.5.4
  • Tomcat 7.0.8
  • wsdl 2.0 file

请帮忙!

14 个答案:

答案 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

中添加wsdlLocation参数的问题

答案 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...
            });