【问题标题】:Apache Camel: update route through JMX throws org.omg.CORBA.BAD_PARAMApache Camel:通过 JMX 更新路由抛出 org.omg.CORBA.BAD_PARAM
【发布时间】:2015-03-04 10:13:14
【问题描述】:

在 Apache Camel 上开发了一个小组件,用作多播器,将传入消息转发到一组端点。

此组件正在 WebLogic 服务器上运行。

版本详情:

  • JDK:1.6 / 1.7.0_75
  • Apache Camel:2.14.1
  • WebLogic:10.3.6

提出了一项新要求,即在运行时修改目标端点集,而无需重新构建和重新部署组件。

第一个想法是使用 Apache Camel 提供的 JMX 功能来实现这一点。

JConsole 用作 JMX 客户端。

jconsole -J-Djava.class.path=%JAVA_HOME%\lib\jconsole.jar;%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\wlfullclient.jar;%WL_HOME%\server\lib\wljmxclient.jar -debug

作为我们使用的连接字符串:

service:jmx:rmi:///jndi/iiop://localhost:7001/weblogic.management.mbeanservers.runtime

管理对象路由 (see available docu) 中的方法 updateRouteFromXML 似乎适合这项工作。

为了测试这个方法,首先调用dumpRouteAsXml来得到一个XML格式的要修改的路由的描述。

路线示例如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<route customId="false" id="route7" xmlns="http://camel.apache.org/schema/spring">
<from uri="servlet:///TESTServer"/>
<convertBodyTo type="[B" id="convertBodyTo7"/>
<removeHeader headerName="CamelHttpPath" id="removeHeader7"/>
  <multicast parallelProcessing="true" timeout="3000" id="multicast7">
    <to uri="http://ip1:8007/IOCServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to19"/>
    <to uri="http://ip2:8007/IOCServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to20"/>
    <to uri="http://ip3:8007/IOCServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to21"/>
  </multicast>
</route>

此 xml 用作 updateRouteFromXML 的输入:

<route customId="false" id="route7" xmlns="http://camel.apache.org/schema/spring">
<from uri="servlet:///TESTServer"/>
<convertBodyTo type="[B" id="convertBodyTo7"/>
<removeHeader headerName="CamelHttpPath" id="removeHeader7"/>
  <multicast parallelProcessing="true" timeout="3000" id="multicast7">
    <to uri="http://ip1:8007/IOCServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to19"/>
    <to uri="http://ip2:8007/IOCServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to20"/>
    <to uri="http://ip3:8007/IOCServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to21"/>
  </multicast>
</route>

我们尝试了几种变体(例如没有 xml 标头)。

但总是得到相同的异常:

在 Jconsole 中

org.omg.CORBA.MARSHAL: CORBA BAD_PARAM 0 No; nested exception is:
    org.omg.CORBA.BAD_PARAM:   vmcid: 0x0  minor code: 0  completed: No  vmcid: 0x0  minor code: 0  completed: No
    at weblogic.iiop.Utils.wrapMARSHALWithCause(Utils.java:906)
    at weblogic.iiop.IIOPInputStream.read_value(IIOPInputStream.java:2142)
    at weblogic.iiop.ReplyMessage.getThrowable(ReplyMessage.java:345)
    at weblogic.iiop.InboundResponseImpl.getThrowable(InboundResponseImpl.java:70)
    at weblogic.iiop.InboundResponseImpl.unmarshalReturn(InboundResponseImpl.java:86)
    at weblogic.iiop.IIOPRemoteRef.invokeInternal(IIOPRemoteRef.java:232)
    at weblogic.iiop.IIOPRemoteRef.invoke(IIOPRemoteRef.java:161)
    at javax.management.remote.rmi.RMIConnection_IIOP_WLStub.invoke(Unknown Source)
    at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.invoke(RMIConnector.java:993)
    at sun.tools.jconsole.inspector.XMBean.invoke(XMBean.java:76)
    at sun.tools.jconsole.inspector.XOperations$1.doInBackground(XOperations.java:151)
    at javax.swing.SwingWorker$1.call(SwingWorker.java:277)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at javax.swing.SwingWorker.run(SwingWorker.java:316)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.rmi.MarshalException: CORBA BAD_PARAM 0 No; nested exception is:
    org.omg.CORBA.BAD_PARAM:   vmcid: 0x0  minor code: 0  completed: No
    at weblogic.iiop.Utils.mapSystemException(Utils.java:941)
    at weblogic.iiop.IIOPInputStream.readObject(IIOPInputStream.java:2791)
    at weblogic.utils.io.ObjectStreamClass.readFields(ObjectStreamClass.java:460)
    at weblogic.corba.utils.ValueHandlerImpl.readValueData(ValueHandlerImpl.java:294)
    at weblogic.corba.utils.ValueHandlerImpl.readValue(ValueHandlerImpl.java:93)
    at weblogic.iiop.IIOPInputStream.read_value(IIOPInputStream.java:2128)
    ... 16 more
Caused by: org.omg.CORBA.BAD_PARAM:   vmcid: 0x0  minor code: 0  completed: No
    at weblogic.corba.idl.RemoteDelegateImpl.postInvoke(RemoteDelegateImpl.java:477)
    at weblogic.corba.idl.RemoteDelegateImpl.invoke(RemoteDelegateImpl.java:384)
    at weblogic.corba.idl.RemoteDelegateImpl.invoke(RemoteDelegateImpl.java:341)
    at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)
    at com.sun.org.omg.SendingContext._CodeBaseStub.meta(_CodeBaseStub.java:105)
    at com.sun.corba.se.impl.io.IIOPInputStream.getOrderedDescriptions(IIOPInputStream.java:1281)
    at com.sun.corba.se.impl.io.IIOPInputStream.skipObjectUsingFVD(IIOPInputStream.java:1635)
    at com.sun.corba.se.impl.io.IIOPInputStream.simpleSkipObject(IIOPInputStream.java:465)
    at com.sun.corba.se.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:315)
    at com.sun.corba.se.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:289)
    at weblogic.iiop.IIOPInputStream.read_value(IIOPInputStream.java:2154)
    at weblogic.iiop.IIOPInputStream.readObject(IIOPInputStream.java:2788)
    ... 20 more
Caused by: org.omg.CORBA.BAD_PARAM:   vmcid: 0x0  minor code: 0  completed: No
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.Class.newInstance0(Class.java:357)
    at java.lang.Class.newInstance(Class.java:310)
    at weblogic.iiop.ReplyMessage.getThrowable(ReplyMessage.java:318)
    at weblogic.corba.idl.RemoteDelegateImpl.postInvoke(RemoteDelegateImpl.java:468)
    ... 31 more

在 Weblogic 域日志中

####<04-Mar-2015 09:18:47 o'clock GMT> <Warning> <RMI> <A06687> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogi
c.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <563d78f4cf343dab:1b180373:14be40cba13:-8000-000000000000006d> <14254607271
31> <BEA-080003> <RuntimeException thrown by rmi server: weblogic.corba.cos.codebase.CodeBaseImpl.meta(Ljava.lang.String;)
 org.omg.CORBA.BAD_PARAM: Could not find FVD class for: RMI:org.apache.camel.FailedToCreateRouteException:8AC243E89C992A07:000
0000000000001  vmcid: 0x0  minor code: 0  completed: No.M
org.omg.CORBA.BAD_PARAM: Could not find FVD class for: RMI:org.apache.camel.FailedToCreateRouteException:8AC243E89C992A07:0000
000000000001  vmcid: 0x0  minor code: 0  completed: NoM
        at weblogic.corba.cos.codebase.CodeBaseImpl.meta(CodeBaseImpl.java:104)M
        at org.omg.SendingContext._CodeBaseImplBase._invoke(_CodeBaseImplBase.java:94)M
        at weblogic.corba.idl.CorbaServerRef.invoke(CorbaServerRef.java:249)M
        at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:522)M
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)M
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)M
        at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:518)M
        at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)M
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)M
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)M
>

是否有人通过 JMX 成功调用了 UpdateRouteFromXml

使用 jdk1.7.0_75 进行相同的错误测试

Weblogic 域日志

####<04-Mar-2015 17:30:22 o'clock GMT> <Warning> <RMI> <A06687>
<AdminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <563d78f4cf343dab:3d01a2cd:14be5cdcdc4:-8000-0000000000000032> <14254902221 66><BEA-080003> <RuntimeException thrown by rmi server:weblogic.corba.cos.codebase.CodeBaseImpl.meta(Ljava.lang.String;)
 org.omg.CORBA.BAD_PARAM: Could not find FVD class for: RMI:org.apache.camel.FailedToCreateRouteException:8AC243E89C992A07:000
0000000000001  vmcid: 0x0  minor code: 0  completed: No.M
org.omg.CORBA.BAD_PARAM: Could not find FVD class for: RMI:org.apache.camel.FailedToCreateRouteException:8AC243E89C992A07:0000
000000000001  vmcid: 0x0  minor code: 0  completed: NoM
        at weblogic.corba.cos.codebase.CodeBaseImpl.meta(CodeBaseImpl.java:104)M
        at org.omg.SendingContext._CodeBaseImplBase._invoke(_CodeBaseImplBase.java:94)M
        at weblogic.corba.idl.CorbaServerRef.invoke(CorbaServerRef.java:249)M
        at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:522)M
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)M
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)M
        at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:518)M
        at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)M
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)M
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)M
>

JConsole 日志

java.lang.SecurityException: Expecting a javax.management.remote.rmi.RMIServerImpl_Stub stub!
    at javax.management.remote.rmi.RMIConnector.checkStub(RMIConnector.java:1845)
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:295)
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:268)
    at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:370)
    at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:313)
    at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:292)
java.io.StreamCorruptedException: 
    at com.sun.corba.se.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2389)
    at com.sun.corba.se.impl.io.IIOPInputStream.inputObjectUsingFVD(IIOPInputStream.java:1580)
    at com.sun.corba.se.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:414)
    at com.sun.corba.se.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:341)
    at com.sun.corba.se.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:307)
    at weblogic.iiop.IIOPInputStream.read_value(IIOPInputStream.java:2154)
    at weblogic.iiop.ReplyMessage.getThrowable(ReplyMessage.java:345)
    at weblogic.iiop.InboundResponseImpl.getThrowable(InboundResponseImpl.java:70)
    at weblogic.iiop.InboundResponseImpl.unmarshalReturn(InboundResponseImpl.java:86)
    at weblogic.iiop.IIOPRemoteRef.invokeInternal(IIOPRemoteRef.java:232)
    at weblogic.iiop.IIOPRemoteRef.invoke(IIOPRemoteRef.java:161)
    at javax.management.remote.rmi.RMIConnection_IIOP_WLStub.invoke(Unknown Source)
    at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.invoke(RMIConnector.java:1022)
    at sun.tools.jconsole.inspector.XMBean.invoke(XMBean.java:96)
    at sun.tools.jconsole.inspector.XOperations$1.doInBackground(XOperations.java:168)
    at javax.swing.SwingWorker$1.call(SwingWorker.java:296)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at javax.swing.SwingWorker.run(SwingWorker.java:335)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.omg.CORBA.BAD_PARAM:   vmcid: 0x0  minor code: 0  completed: No
    at weblogic.corba.idl.RemoteDelegateImpl.postInvoke(RemoteDelegateImpl.java:477)
    at weblogic.corba.idl.RemoteDelegateImpl.invoke(RemoteDelegateImpl.java:384)
    at weblogic.corba.idl.RemoteDelegateImpl.invoke(RemoteDelegateImpl.java:341)
    at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:475)
    at com.sun.org.omg.SendingContext._CodeBaseStub.meta(_CodeBaseStub.java:123)
    at com.sun.corba.se.impl.io.IIOPInputStream.getOrderedDescriptions(IIOPInputStream.java:1296)
    at com.sun.corba.se.impl.io.IIOPInputStream.skipObjectUsingFVD(IIOPInputStream.java:1650)
    at com.sun.corba.se.impl.io.IIOPInputStream.simpleSkipObject(IIOPInputStream.java:482)
    at com.sun.corba.se.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:333)
    at com.sun.corba.se.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:307)
    at weblogic.iiop.IIOPInputStream.read_value(IIOPInputStream.java:2154)
    at com.sun.corba.se.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:1912)
    at com.sun.corba.se.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2335)
    ... 20 more
Caused by: org.omg.CORBA.BAD_PARAM:   vmcid: 0x0  minor code: 0  completed: No
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:379)
    at weblogic.iiop.ReplyMessage.getThrowable(ReplyMessage.java:318)
    at weblogic.corba.idl.RemoteDelegateImpl.postInvoke(RemoteDelegateImpl.java:468)
    ... 32 more

任何帮助将不胜感激。

【问题讨论】:

    标签: weblogic apache-camel jmx jconsole


    【解决方案1】:

    由于 WebLogic 服务器在我的笔记本电脑上本地运行,我尝试了来自 JConsole 的本地连接(而不是远程连接),然后重新测试。 通过这样做,我摆脱了 CORBA 错误,并且可以看到 Camel 抛出了一个异常,但它无法在客户端加载。

    原因:java.lang.ClassNotFoundException: org.apache.camel.FailedToCreateRouteException(无安全管理器:RMI 类加载器已禁用)

    完整的堆栈跟踪:

    java.lang.SecurityException: Expecting a javax.rmi.ssl.SslRMIClientSocketFactory RMI client socket factory in stub!
        at javax.management.remote.rmi.RMIConnector.checkStub(RMIConnector.java:1874)
        at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:295)
        at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:268)
        at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:357)
        at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:313)
        at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:292)
    java.rmi.UnmarshalException: Error unmarshaling return; nested exception is: 
        java.lang.ClassNotFoundException: org.apache.camel.FailedToCreateRouteException (no security manager: RMI class loader disabled)
        at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:246)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161)
        at com.sun.jmx.remote.internal.PRef.invoke(Unknown Source)
        at javax.management.remote.rmi.RMIConnectionImpl_Stub.invoke(Unknown Source)
        at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.invoke(RMIConnector.java:1022)
        at sun.tools.jconsole.inspector.XMBean.invoke(XMBean.java:96)
        at sun.tools.jconsole.inspector.XOperations$1.doInBackground(XOperations.java:168)
        at javax.swing.SwingWorker$1.call(SwingWorker.java:296)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at javax.swing.SwingWorker.run(SwingWorker.java:335)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.ClassNotFoundException: org.apache.camel.FailedToCreateRouteException (no security manager: RMI class loader disabled)
        at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:393)
        at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:185)
        at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:637)
        at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:264)
        at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:214)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1612)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
        at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:244)
        ... 12 more
    

    我在 JConsole 类路径中添加了 camel-core.jar:

    jconsole -J-Djava.class.path=%JAVA_HOME%\lib\jconsole.jar;%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\wlfullclient.jar;%WL_HOME%\server\lib\wljmxclient.jar;%M2_HOME%\repository\org\apache\camel\camel-core\2.14.1\camel-core-2.14.1.jar -debug
    

    并再次重新测试:

    输入XML进行测试(实际上是dumpRouteAsXml的输出)

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <route customId="false" id="route1" xmlns="http://camel.apache.org/schema/spring">
        <from uri="servlet:///TESTServer"/>
        <convertBodyTo type="[B" id="convertBodyTo1"/>
        <removeHeader headerName="CamelHttpPath" id="removeHeader1"/>
        <multicast parallelProcessing="true" timeout="3000" id="multicast1">
            <to uri="http://ip-address1:6001/TARGETServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to1"/>
            <to uri="http://ip-address2:6001/TARGETServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to2"/>
            <to uri="http://ip-address3:6001/TARGETServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to3"/>
        </multicast>
    </route>
    

    Camel 抛出的异常现在已记录,我可以看到 Route 定义中有错误。我不能简单地复制 dumpRouteAsXml 的输出并将其粘贴到 updateRouteFromXml

    引起:java.lang.ClassNotFoundException:[B

    完整的堆栈跟踪:

    org.apache.camel.FailedToCreateRouteException: Failed to create route route1 at: >>> ConvertBodyTo[[B] <<< in route: Route(route1)[[From[servlet:///IOCVodaServer]] -> [ConvertBo... because of [B
        at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:945)
        at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:187)
        at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:805)
        at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:2174)
        at org.apache.camel.impl.DefaultCamelContext.addRouteDefinitions(DefaultCamelContext.java:739)
        at org.apache.camel.impl.DefaultCamelContext.addRouteDefinition(DefaultCamelContext.java:744)
        at org.apache.camel.management.mbean.ManagedRoute.updateRouteFromXml(ManagedRoute.java:262)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:37)
        at sun.reflect.GeneratedMethodAccessor188.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244)
        at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1074)
        at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:955)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$16.run(WLSMBeanServerInterceptorBase.java:449)
        at java.security.AccessController.doPrivileged(Native Method)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.invoke(WLSMBeanServerInterceptorBase.java:447)
        at weblogic.management.mbeanservers.internal.JMXContextInterceptor.invoke(JMXContextInterceptor.java:263)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$16.run(WLSMBeanServerInterceptorBase.java:449)
        at java.security.AccessController.doPrivileged(Native Method)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.invoke(WLSMBeanServerInterceptorBase.java:447)
        at weblogic.management.mbeanservers.internal.SecurityInterceptor.invoke(SecurityInterceptor.java:444)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServer.invoke(WLSMBeanServer.java:323)
        at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1427)
        at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
        at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1265)
        at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1360)
        at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788)
        at sun.reflect.GeneratedMethodAccessor162.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303)
        at sun.rmi.transport.Transport$1.run(Transport.java:159)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
    Caused by: java.lang.ClassNotFoundException: [B
        at org.apache.camel.impl.DefaultClassResolver.resolveMandatoryClass(DefaultClassResolver.java:53)
        at org.apache.camel.model.ConvertBodyDefinition.createProcessor(ConvertBodyDefinition.java:92)
        at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:500)
        at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:213)
        at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:942)
        ... 46 more
    

    这个“[B”代表字节[].class。您可以在下面看到以编程方式设置的实际配置。

    from("servlet:///TESTServer")
        .convertBodyTo(byte[].class)
        .removeHeader(Exchange.HTTP_PATH)
        .multicast()
        .parallelProcessing()
        .timeout(3000)
        .to(eb.getEndpoints("DESTINATIONS1"))
    .end();
    

    经过反复试验,我得到了正确的 XML 定义并成功调用了 updateRouteFromXml

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <route customId="false" id="route3" xmlns="http://camel.apache.org/schema/spring">
        <from uri="servlet:///TESTServer"/>
        <convertBodyTo type="byte[]" id="convertBodyTo3"/>
        <removeHeader headerName="CamelHttpPath" id="removeHeader3"/>
        <multicast parallelProcessing="true" timeout="3000" id="multicast3">
            <to uri="http://ip-address1:9993/TARGETServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to7"/>
            <to uri="http://ip-address2:9993/TARGETServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to8"/>
            <to uri="http://ip-address3:9993/TARGETServer?bridgeEndpoint=true&amp;throwExceptionOnError=false" id="to9"/>
        </multicast>
    </route>
    

    感谢和问候

    【讨论】:

      【解决方案2】:

      从 Apache Camel 2.14 开始不支持 Java 6。您需要使用 Java 7 或 8。

      查看发布说明的底部:

      【讨论】:

      • 感谢您的回复。我已经用 jdk1.7.0_75 进行了测试并得到了同样的错误。在 weblogic 域日志中 #### >
      猜你喜欢
      • 1970-01-01
      • 2013-03-28
      • 2016-09-29
      • 1970-01-01
      • 2013-04-24
      • 2018-01-20
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多