2014-12-05 2 views
1

У меня есть поток мула, который вызывает метод и устанавливает возвращаемое значение в полезной нагрузке.Ошибка мула --2. Не удалось вызвать метод. Полезная нагрузка сообщения имеет тип string

Вот часть моего потока, что делает его

<flow name="PositiveFlow1" doc:name="PositiveFlow1"> 
     <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="9293" doc:name="HTTP"/> 
     <invoke object-ref="TestUtils1" 
     method="getSignedClaimWrapper" 
     doc:name="Invoke"/> 
     <set-session-variable variableName="clientcontext" value="#[payload]" doc:name="Session Variable"/> 
     <flow-ref name="_subflow1" doc:name="Flow Reference"/> 
    </flow> 

getSignedClaimWrapper возвращает Base64 закодированную строку.

Вот моя трассировка стека.

Message    : Failed to invoke [email protected] Message payload is of type: String 
Code     : MULE_ERROR--2 
-------------------------------------------------------------------------------- 
Exception stack is: 
1. org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString([B)Ljava/lang/String; (java.lang.NoSuchMethodError) 
    com.nimbusds.jose.util.Base64URL:64 (null) 
2. Failed to invoke [email protected] Message payload is of type: String (org.mule.api.MessagingException) 
    org.mule.processor.InvokerMessageProcessor:178 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html) 
-------------------------------------------------------------------------------- 
Root Exception stack trace: 
java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString([B)Ljava/lang/String; 
    at com.nimbusds.jose.util.Base64URL.encode(Base64URL.java:64) 
    at com.nimbusds.jose.util.Base64URL.encode(Base64URL.java:91) 
    at com.nimbusds.jose.Header.toBase64URL(Header.java:238) 
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) 
******************************************************************************** 

Я предполагаю, что это связано с тем, что у Mule есть ограничение на обработку Base64 Strings. Поскольку тестовые примеры для класса TestUtils кажутся совершенно безупречными.

Любое понимание того, что может произойти или возможные решения, будет оценено по достоинству!

весна фасоль из мула потока:

<spring:bean id="TestUtils1" class="com.package.TestUtils"/>  
</spring:beans> 

Соответствующая часть Java класса:

public String getSignedClaimWrapper() throws KeyLoadException, 
    KeyNotFoundException, SignException, SignerNotInitializedException 
    { 

     String signedClaim = rsaTokenSigner.signClaim(claimsSet);// returns a base64 encoded string. 

     System.out.println("The signed claim is " + signedClaim); 
     return signedClaim; 
    } 
} 
+0

Не могли бы вы отобразить класс java и метод, который вы пытаетесь вызвать? Также весенний боб в Mule config ?? –

ответ

1

Библиотека Обще кодек входит мул более старше, чем тот, ваши потребности rsaTokenSigner , Это действительно содержит этот метод.

Я бы попытался использовать classpath override и в том числе новую библиотеку с вашим приложением.

+0

Спасибо за ответ. Но вы имели в виду блок вместо переопределения? – userNotFound

+0

Не помогает. Переопределение ничего не меняет, и блокировка вызывает «ClassNotFoundException». – userNotFound

+0

После того, как вы заблокировали, вы добавили библиотеку в свое приложение или в lib/user? –