【问题标题】:SoapUI5.7 + Mule4.4: "java.lang.IllegalArgumentException: path parameter must start with /"SoapUI5.7 + Mule4.4:“java.lang.IllegalArgumentException:路径参数必须以/开头”
【发布时间】:2022-01-23 01:03:52
【问题描述】:

我正在使用 SoapUI 检查 Mule 并遇到问题 path parameter must start with /

Mule 上的错误消息

WARN  2022-01-23 00:01:02,491 [http.listener.03 SelectorRunner] org.glassfish.grizzly.filterchain.DefaultFilterChain: GRIZZLY0013: Exception during FilterChain execution
java.lang.IllegalArgumentException: path parameter must start with /
    at org.mule.runtime.api.util.Preconditions.checkArgument(Preconditions.java:25) ~[mule-api-1.4.0-20211227.jar:?]
    at org.mule.service.http.impl.service.util.DefaultRequestMatcherRegistry.lambda$new$1(DefaultRequestMatcherRegistry.java:69) ~[mule-service-http-1.6.3.jar:1.6.3]
    at com.github.benmanes.caffeine.cache.LocalLoadingCache.lambda$newMappingFunction$2(LocalLoadingCache.java:140) ~[caffeine-2.8.0.jar:?]
    at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2379) ~[caffeine-2.8.0.jar:?]
    at java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1853) ~[?:1.8.0_282]
    at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2377) ~[caffeine-2.8.0.jar:?]
    at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2360) ~[caffeine-2.8.0.jar:?]
    at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108) ~[caffeine-2.8.0.jar:?]
    at com.github.benmanes.caffeine.cache.LocalLoadingCache.get(LocalLoadingCache.java:54) ~[caffeine-2.8.0.jar:?]
    at org.mule.service.http.impl.service.util.DefaultRequestMatcherRegistry.find(DefaultRequestMatcherRegistry.java:260) ~[mule-service-http-1.6.3.jar:1.6.3]
    at org.mule.service.http.impl.service.server.HttpListenerRegistry.getRequestHandler(HttpListenerRegistry.java:109) ~[mule-service-http-1.6.3.jar:1.6.3]
    at org.mule.service.http.impl.service.server.grizzly.GrizzlyRequestDispatcherFilter.handleRead(GrizzlyRequestDispatcherFilter.java:123) ~[mule-service-http-1.6.3.jar:1.6.3]
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) ~[grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) ~[grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) ~[grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) [grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) [grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) [grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:540) [grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) [grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.mule.service.http.impl.service.server.grizzly.ExecutorPerServerAddressIOStrategy.run0(ExecutorPerServerAddressIOStrategy.java:99) [mule-service-http-1.6.3.jar:1.6.3]
    at org.mule.service.http.impl.service.server.grizzly.ExecutorPerServerAddressIOStrategy.executeIoEvent(ExecutorPerServerAddressIOStrategy.java:74) [mule-service-http-1.6.3.jar:1.6.3]
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.executeIoEvent(AbstractIOStrategy.java:89) [grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.glassfish.grizzly.nio.SelectorRunner.iterateKeyEvents(SelectorRunner.java:415) [grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.glassfish.grizzly.nio.SelectorRunner.iterateKeys(SelectorRunner.java:384) [grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.glassfish.grizzly.nio.SelectorRunner.doSelect(SelectorRunner.java:348) [grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at org.glassfish.grizzly.nio.SelectorRunner.run(SelectorRunner.java:279) [grizzly-framework-2.3.36-MULE-024.jar:2.3.36-MULE-024]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_282]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_282]
    at org.mule.service.scheduler.internal.AbstractRunnableFutureDecorator.doRun(AbstractRunnableFutureDecorator.java:113) [mule-service-scheduler-1.4.1/:?]
    at org.mule.service.scheduler.internal.RunnableFutureDecorator.run(RunnableFutureDecorator.java:54) [mule-service-scheduler-1.4.1/:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_282]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_282]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_282]

步骤

  1. 在此处查找 WSDL (https://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL)

  2. [Mule4.4] 创建监听器和 SOAP 路由器。
    HTTP 侦听器配置:端口 = 1081
    SOAP 配置:Wsdl 位置 =(步骤 1 中的 URL。)

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:apikit-soap="http://www.mulesoft.org/schema/mule/apikit-soap" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd http://www.mulesoft.org/schema/mule/apikit-soap http://www.mulesoft.org/schema/mule/apikit-soap/current/mule-apikit-soap.xsd http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
    <http:listener-config name="api-httpListenerConfig">
        <http:listener-connection host="0.0.0.0" port="1081"/>
    </http:listener-config>
    <apikit-soap:config httpStatusVarName="httpStatus" name="soapkit-config" port="NumberConversionSoap" service="NumberConversion" wsdlLocation="https://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL"/>
    <flow name="api-main">
        <http:listener config-ref="api-httpListenerConfig" path="/NumberConversion/NumberConversionSoap">
            <http:response statusCode="#[attributes.additionalTransportData.statusCode default 200]">
                <http:body>#[payload]</http:body>
                <http:headers>#[attributes.protocolHeaders default {}]</http:headers>
            </http:response>
            <http:error-response statusCode="#[attributes.additionalTransportData.statusCode default 500]">
                <http:body>#[payload]</http:body>
                <http:headers>#[attributes.protocolHeaders default {}]</http:headers>
            </http:error-response>
        </http:listener>
        <apikit-soap:router config-ref="soapkit-config">
            <apikit-soap:attributes><![CDATA[#[%dw 2.0
              output application/java
              ---
              {
                  headers: attributes.headers,
                  method: attributes.method,
                  queryString: attributes.queryString
            }]]]></apikit-soap:attributes>
        </apikit-soap:router>
    </flow>
    <flow name="NumberToWords:\soapkit-config">
        <ee:transform>
            <ee:message>
                <ee:set-payload>
                    <![CDATA[%dw 2.0
output application/java
ns soap http://schemas.xmlsoap.org/soap/envelope
---
{
    body: {
        soap#Fault: {
            faultcode: "soap:Server",
            faultstring: "Operation [NumberToWords:\soapkit-config] not implemented"
        }
    } write "application/xml"
}]]>
                </ee:set-payload>
            </ee:message>
        </ee:transform>
    </flow>
    <flow name="NumberToDollars:\soapkit-config">
        <ee:transform>
            <ee:message>
                <ee:set-payload>
                    <![CDATA[%dw 2.0
output application/java
ns soap http://schemas.xmlsoap.org/soap/envelope
---
{
    body: {
        soap#Fault: {
            faultcode: "soap:Server",
            faultstring: "Operation [NumberToDollars:\soapkit-config] not implemented"
        }
    } write "application/xml"
}]]>
                </ee:set-payload>
            </ee:message>
        </ee:transform>
    </flow>
</mule>
  1. [SoapUI5.7] 使用步骤 1 中的 URL 创建一个新的 SOAP API。然后创建一个新请求 (https://0.0.0.0:1081/NumberConversion/NumberConversionSoap) 并运行它。底部的消息说“未能响应”

  2. [Mule4.4] 查看消息。

备注

我确认 Listener's Path 以“/”开头。

【问题讨论】:

  • 请使用文字代替图片。有关原因的更多详细信息,请参阅meta.stackoverflow.com/questions/285551/…。对于 Mule 流程和配置,粘贴文本 XML
  • 感谢您的建议。我添加了 XML(即使我没有直接编辑这个 XML)。

标签: soap mule soapui anypoint-studio mule4


【解决方案1】:

这是一个警告而不是错误。它很可能是无害的。确保您使用的是最新版本的 Studio 和 Mule 4.4 的累积补丁。但是日志中有一些奇怪的东西。它看起来正在为 Mule 4.3 (mule-service-http-1.6.3) 执行 HTTP 服务,这不是 Mule 4 的正确版本。可能是该项目正在 Mule 4.3 中执行?检查应用程序启动时的日志并确定运行配置。

【讨论】:

  • SoapUI 没有得到响应,所以应该有问题。前几天下载了Anypoint Studio和Mule,应该是最新版本。我还在控制台中检查了MULE_HOME is set to /Applications/AnypointStudio.app/Contents/Eclipse/plugins/org.mule.tooling.server.4.4.0.ee_7.11.0.202201052152/muleVersion: 4.4.0-20211227 Build: 6f6c60e6
  • 哪个版本的 Studio?最后一个是 7.11.1。确保你下载了那个然后检查更新。
  • 这是 Anypoint Studio 信息:“版本:7.11.1 构建 ID:202201060126”。几天前,我确实从这里 (mulesoft.com/lp/dl/studio) 下载了 Anypoint Studio 和 Mule。
  • 我下载并升级了相同版本的 Studio 和相同版本的 Mule 运行时 (org.mule.tooling.server.4.4.0.ee_7.11.0.202201052152)。它包含的 HTTP 服务似乎是正确的版本,但里面的库 jar 是 1.6.3。不确定这是一个问题还是预期的。该警告似乎可能是一个错误。您在日志中看到任何其他消息吗?
  • 我已经验证版本是正确的并且版本号符合预期。这可能是以前版本中存在的错误。
猜你喜欢
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2017-03-19
  • 2020-02-15
  • 1970-01-01
  • 2021-05-29
相关资源
最近更新 更多