2012-03-19 120 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> 

感謝您的幫助。 弗朗索瓦

回答