【问题标题】:The endpoint reference (EPR) for the Operation not found is未找到操作的端点参考 (EPR) 是
【发布时间】:2011-08-24 07:04:01
【问题描述】:

在过去的几次中,我一直在努力解决以下错误 天你能帮忙!

我使用 wsdl2java 工具从 wsdl 2.0 文件。 调用网络服务时出现以下错误:

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 文件

请帮忙!

【问题讨论】:

    标签: wsdl axis2


    【解决方案1】:

    我收到此错误是因为我发送到服务器的 SOAP 请求格式不正确并且正文为空

    在这种情况下,来自服务器的错误消息具有误导性,可以通过更改请求内容来解决,而无需更改任何有关操作、URL、WSDL 等的内容

    【讨论】:

      【解决方案2】:

      出现此错误是因为在调用服务时,它没有获取服务的 WSDL 文件。

      只需检查您的服务的 WSDL 文件是否存在 --> 运行服务器并从浏览器在本地主机上运行轴 2 应用程序并检查已部署的服务并单击您的服务,然后它会显示您的服务的 WSDL 文件... ..或检查客户端文件中的服务路径。

      我希望它可以帮助您解决问题。

      【讨论】:

      • 对我来说,和上面一样。即我指向错误的 WSDL 文件,该文件偏离了预期的操作。谢谢。
      【解决方案3】:

      打开 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...
                  });
      

      【讨论】:

        【解决方案4】:

        这可以通过禁用验证来解决

        <proxy>
            <!-- . . . -->
            <parameter name="disableOperationValidation">true</parameter>
        </proxy>
        

        【讨论】:

        • 您的解决方案适用于 wso2 微积分器 1.2.0!
        【解决方案5】:

        我在使用 curl 发送肥皂请求时遇到了同样的问题。通过在 http 标头中添加“content-type: text/xml”来解决它。

        我希望这对某人有所帮助。

        【讨论】:

        • 这对我有帮助。我正在使用“application/xml”,当我切换到“text/html”时,问题就消失了......
        • 很抱歉,这是一个假问题,但如何将其添加到 http 标头中?
        【解决方案6】:

        在 Websphere Application Server 上,在相同的情况下,它有助于在服务器停止时删除 Temp 文件夹。

        我在服务包发生变化时遇到了这种情况。

        【讨论】:

          【解决方案7】:

          迟到的答案,但是:

          我看到你做了一个 GET - 应该是一个 POST 吗?

          【讨论】:

            【解决方案8】:

            通过删除 /tmp 文件夹中的缓存 wsdl-* 文件,我的问题得到了解决

            https://www.drupal.org/node/1132926#comment-6283348

            注意删除权限

            我在 ubuntu 操作系统中

            【讨论】:

              【解决方案9】:

              这是因为每个操作中的源 WSDL 没有定义 SOAPAction 值。

              例如

              <soap12:operation soapAction="" style="document"/>  
              

              他对轴服务器很重要。

              如果你已经在 netbeans 或其他上创建了服务,别忘了在标签@WebMethod 上设置值操作

              例如@WebMethod(action = "hello", operationName = "hello")

              这将自行创建 SOAPAction 值。

              【讨论】:

                【解决方案10】:

                正如 Eran Chinthaka 在http://wso2.com/library/176/ 所描述的那样

                如果 Axis2 引擎找不到消息的服务和操作, 它立即失败,向发件人发送故障。如果服务不 找到 - “服务未找到 EPR 是” 如果 找到服务但未找到操作-“未找到操作 EPR 是和 WSA 操作 =”

                在您的情况下,找到了服务,但没有找到操作。 Axis2 引擎使用 SOAPAction 来确定请求的操作,在您的示例中,缺少 SOAPAction,因此我将尝试定义 SOAPAction 标头

                【讨论】:

                  【解决方案11】:

                  尝试将?wsdl 添加到字符串中。

                  【讨论】:

                  • 这个查询字符串是什么意思?
                  【解决方案12】:

                  Action is 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
                  

                  【讨论】:

                    【解决方案13】:

                    似乎没有找到 wsdl 文件..
                    我已经解决了在 javax.jws.WebService 注释中添加 wsdlLocation 参数

                    【讨论】:

                      【解决方案14】:

                      在我的情况下,这是由 HTTP POST 中的错误 Content-Type 引起的。将其设置为text/xml 即可解决问题。

                      【讨论】:

                        【解决方案15】:

                        通过客户端调用时,尝试删除操作名称(身份验证)后多余的“/”

                        /axis2/services/MyService/authentication?username=Denise345&password=xxxxx
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2014-01-06
                          • 1970-01-01
                          相关资源
                          最近更新 更多