0

我使用 mina 组件创建了一个非常简单的骆驼路线。这个路由实际上使用了一个自定义的 Codec 并且被打包为 osgi bundle。每当我将它部署到 servicemix (apache-servicemix-4.4.1-fuse-03-06) 时,捆绑包都没有处于活动状态,而是已安装。当然,当我尝试启动它时,我从控制台收到“执行命令时出错: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>

谢谢你的帮助。弗朗索瓦

4

1 回答 1

0

这里正在讨论和回答 http://fusesource.com/forums/thread.jspa?threadID=3776&tstart=0

于 2012-03-20T16:55:49.383 回答