簡體   English   中英

ule子-直到成功都引發異常

[英]Mule - Throw Exception with until-successful

這是我的m子流:

HTTP => 記錄器 => SOAP(CXF) =>直到成功[ JAVA ] => LOGGER

春季:

<spring:beans>
    <spring:bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <spring:property name="locations">
            <spring:list>
                <spring:value>test.properties</spring:value>
            </spring:list>
        </spring:property>
    </spring:bean>
    <spring:bean id="testIntegration"
        class="x.x.x.IntegrationClass" init-method="init">
        <spring:property name="url" value="${destiny.url}" />
        <spring:property name="username" value="${message.username}" />
        <spring:property name="password" value="${message.password}" />
    </spring:bean>
</spring:beans>

流:

    <http:inbound-endpoint exchange-pattern="request-response"
        host="localhost" port="8087" doc:name="HTTP" />
    <logger message="#[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/>

    <cxf:jaxws-service doc:name="Test service"
        serviceClass="dynamics.file.request.Requests" />

    <until-successful maxRetries="3"
        secondsBetweenRetries="60" doc:name="Until Successful" synchronous="true">
        <component doc:name="Java">
            <spring-object bean="testIntegration" />
        </component>
    </until-successful>
    <logger message="#[message.payloadAs(java.lang.String)]" level="INFO"
        doc:name="Logger" />
</flow>

Java組件返回一個字符串(XML但為字符串),當我使用until-successful它向我顯示此錯誤:

Exception thrown inside until-successful org.mule.component.ComponentException: Component that caused exception is: DefaultJavaComponent{Flow_test.component.1805940825}. Message payload is of type: String

[[test_flow].connector.http.mule.default.receiver.02] org.mule.exception.DefaultSystemExceptionStrategy: 

********************************************************************************
Message               : Failed to find entry point for component, the following resolvers tried but failed: [
MethodHeaderPropertyEntryPointResolver: The required property "method" is not set on the event
CallableEntryPointResolver: Object "es.test.integration.testIntegration@4eb6b10c" does not implement required interface "interface org.mule.api.lifecycle.Callable"
ReflectionEntryPointResolver: Found too many possible methods on object "es.test.integration.testIntegration" that accept parameters "{class java.lang.String}", Methods matched are "[public java.lang.String es.test.integration.testIntegration.cte(java.lang.String), public java.lang.String es.test.integration.testIntegration.cancelCte(java.lang.String), public java.lang.String es.test.integration.testIntegration.newCte(java.lang.String), public java.lang.String es.test.integration.testIntegration.totalCte(java.lang.String), public java.lang.String es.test.integration.testIntegration.resultCte(java.lang.String), public java.lang.String es.test.integration.testIntegration.newCte(java.lang.String), public java.lang.String es.test.integration.testIntegration.cteAll(java.lang.String)]"
AnnotatedEntryPointResolver: Component: es.test.integration.testIntegration@4eb6b10c doesn't have any annotated methods, skipping.
]
Code                  : MULE_ERROR-321

    at org.mule.model.resolvers.DefaultEntryPointResolverSet.invoke(DefaultEntryPointResolverSet.java:49)
    at org.mule.component.DefaultComponentLifecycleAdapter.invoke(DefaultComponentLifecycleAdapter.java:339)
    at org.mule.component.AbstractJavaComponent.invokeComponentInstance(AbstractJavaComponent.java:82)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

Message               : Software caused connection abort: socket write error (java.net.SocketException)
Code                  : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. Software caused connection abort: socket write error (java.net.SocketException)
  java.net.SocketOutputStream:-2 (null)
2. Software caused connection abort: socket write error (java.net.SocketException) (org.mule.api.DefaultMuleException)
  org.mule.transport.http.HttpMessageProcessTemplate:170 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/DefaultMuleException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
java.net.SocketException: Software caused connection abort: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

有了這個錯誤,我想我在這里需要任何參數,但是如果我錯了,請更正我:

public void init()
{

    NtlmAuthenticator authenticator = new NtlmAuthenticator(username,password);
    Authenticator.setDefault(authenticator);

    Requestsservice = new Requests();
    clntprt = service.getSolicitudesPort();

    Client client = ClientProxy.getClient(cliente);
    HTTPConduit http = (HTTPConduit) client.getConduit();

    HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
    httpClientPolicy.setAllowChunking(false);

    http.setClient(httpClientPolicy);

    BindingProvider provider = (BindingProvider) clntprt;
    provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
                    url);
}

更新:

在我擁有init方法的地方,我擁有已實現的方法(例如,這兩種方法,但還有更多):

@WebMethod(operationName = "CancelCte", action = "urn:microsoft-dynamics-schemas/codeunit/Requests:CancelCte")
@RequestWrapper(localName = "CancelCte", targetNamespace = "urn:microsoft-dynamics-schemas/codeunit/Requests", className = "x.x.Requests.CancelCte")
@ResponseWrapper(localName = "CancelCte_Result", targetNamespace = "urn:microsoft-dynamics-schemas/codeunit/Requests", className = "x.x.Requests.CancelCteResult")
@WebResult(name = "return_value", targetNamespace = "urn:microsoft-dynamics-schemas/codeunit/Requests")
public String CancelCte(
        @WebParam(name = "xmlInput", targetNamespace = "urn:microsoft-dynamics-schemas/codeunit/Requests") String xmlInput) 
{
    return client.CancelCte(xmlInput);
}

@WebMethod(operationName = "newCte", action = "urn:microsoft-dynamics-schemas/codeunit/Requests:newCte")
@RequestWrapper(localName = "newCte", targetNamespace = "urn:microsoft-dynamics-schemas/codeunit/Requests", className = "x.x.Requests.newCte")
@ResponseWrapper(localName = "newCte_Result", targetNamespace = "urn:microsoft-dynamics-schemas/codeunit/Requests", className = "x.x.Requests.newCteResult")
@WebResult(name = "return_value", targetNamespace = "urn:microsoft-dynamics-schemas/codeunit/Requests")
public String newCte(
        @WebParam(name = "xmlInput", targetNamespace = "urn:microsoft-dynamics-schemas/codeunit/Requests") String xmlInput) 
{
    return client.newCte(xmlInput);
}

像現在一樣,自動使用必要的方法。

使用您提供的部分信息,我只能說問題的根源位於:

<spring-object bean="testIntegration" />

基於: Component that caused exception is: DefaultJavaComponent{Flow_test.component.1805940825}

主要問題是Mule找不到要在自定義組件上調用的方法:arity 1的許多方法有兩種采用String ,這阻止Mule選擇合適的“入口點”。 解決此問題的兩種解決方案:

  • 設置一個名為method的屬性,並在調用該組件之前將該方法的名稱作為其值,
  • 使用invoke消息處理器直接調用所需的方法。

附帶說明一下,該組件似乎執行了出站HTTP調用:通常,您想使用Mule HTTP來執行此操作,而不是在自定義代碼中執行此操作。 首先,您將這些交互隱藏在自定義代碼中:看着Mule配置的人不會知道涉及出站HTTP調用。 而且,Mule本身不知道,因此無法對這些自定義HTTP調用執行常規生命周期和錯誤管理,統計信息之類的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM