我有一个调用方法的mule流并在有效负载中设置返回值。
这是我流程的一部分
<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 com.test.TestUtils@2cfe109a. 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 com.test.TestUtils@2cfe109a. 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字符串有限制。因为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 :(得分:1)
mule中包含的commons编解码器库比rsaTokenSigner所需的更旧。它确实包含了这种方法。
我会尝试使用classpath override并在您的应用程序中包含较新的库。