2012-03-19 118 views
0

我创建了一个使用mina组件的非常简单的骆驼路由。这条路线实际上使用了一个自定义的编解码器,并且打包为osgi包。无论何时将其部署到servicemix(apache-servicemix-4.4.1-fuse-03-06),该软件包都不会处于活动状态,而是已安装。当然,当我尝试启动它时,我从控制台得到一个“错误执行命令:java.lang.NullPointerException”,但没有在日志中...关于servicemix的Mina路由 - 执行命令时出错:java.lang.NullPointerException

有人可以帮我做这个工作,我可以不知道发生了什么......这是包装问题吗?我想这与我的编解码器加载有关,但我现在被困在这里。

这里是我的XML路线

<?xml version="1.0" encoding="UTF-8"?> 
<beans> 
    <bean id="myCodec" class="test.net.mina.codec.MyMinaCodec" /> 
    <camelContext xmlns="http://camel.apache.org/schema/spring"> 
     <route> 
      <from uri="mina:tcp://localhost:9000?sync=true&amp;codec=#myCodec" /> 
      <to uri="log:IncomingMsg" /> 
     </route> 
    </camelContext> 
</beans> 

这里是我的编解码器厂

public class MyMinaCodec implements 
     ProtocolCodecFactory { 

    public ProtocolDecoder getDecoder(IoSession session) throws Exception { 
     return new MyMinaDecoder(); 
    } 

    public ProtocolEncoder getEncoder(IoSession session) throws Exception { 
     return new ProtocolEncoder() { 

      public void encode(IoSession arg0, Object arg1, ProtocolEncoderOutput arg2) throws Exception { 

      } 

      public void dispose(IoSession arg0) throws Exception { 

      } 
     }; 
    } 
} 

我的编解码器实现:

public class MyMinaDecoder extends CumulativeProtocolDecoder { 

    public static final int MSG_HEADER_SIZE = 14; 

    @Override 
    protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { 
     // try to read the message header 
     if (in.remaining() >= MSG_HEADER_SIZE) { 
      out.write(readsUnsignedBytesToString(in, MSG_HEADER_SIZE)); 
      return true; 
     } else { 
      // not enough data 
      return false; 
     } 
    } 

    private String readsUnsignedBytesToString(IoBuffer in, int length) { 
     char[] unsignedChars = new char[length]; 
     for (int i = 0; i < length; i++) { 
      unsignedChars[i] = (char) in.getUnsigned(); 
     } 
     return new String(unsignedChars); 
    } 
} 

而且我的pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>org.apache.servicemix.features</groupId> 
     <artifactId>features</artifactId> 
     <version>4.4.1-fuse-03-06</version> 
    </parent> 

    <groupId>test</groupId> 
    <artifactId>mina-test</artifactId> 
    <packaging>bundle</packaging> 
    <name>My MINA Test</name> 
    <version>0.1.6</version> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-core</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-spring</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-mina</artifactId> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <configuration> 
        <instructions> 
         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
         <Bundle-Description>${project.description}</Bundle-Description> 
         <Import-Package>*</Import-Package> 
         <Require-Bundle>org.apache.servicemix.bundles.mina</Require-Bundle> 
         <Export-Package>test.net.*</Export-Package> 
         <DynamicImport-Package></DynamicImport-Package> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

感谢您的帮助。 弗朗索瓦

回答