使用CAR

时间:2017-01-30 17:47:25

标签: java maven wso2esb wso2carbon

我正在尝试部署一个打包在.car文件中的自定义类调解器。关于这个问题的WSO2 documentation不是很具体,没有可用的例子。

我所做的是:

  1. 编写了一个自定义类中介,如果部署为.jar$CARBON_HOME/repository/components/lib/
  2. ,则可以使用
  3. 将上述JAR打包成.car,然后使用管理控制台将其手动上传到ESB。
  4. 问题:服务器无法找到调解器的类:

    [2017-01-30 18:12:37,810]  WARN - SynapseXMLConfigurationFactory Proxy Service configuration: test cannot be built - Continue in fail-safe mode
    org.apache.synapse.SynapseException: Error loading class : nl.my.mediators.HashMediator - Class not found
        at org.apache.synapse.config.xml.ClassMediatorFactory.createSpecificMediator(ClassMediatorFactory.java:107)
        at org.apache.synapse.config.xml.AbstractMediatorFactory.createMediator(AbstractMediatorFactory.java:94)
    ...
    

    .car文件确实包含有问题的.jar

    Archive:  mediators-v1_1_1.1.3-SNAPSHOT.car
      Length      Date    Time    Name
    ---------  ---------- -----   ----
    ...
            0  2017-01-30 18:07   ca-mediators_1.1.3-SNAPSHOT/
         5399  2017-01-30 18:07   ca-mediators_1.1.3-SNAPSHOT/ca-mediators-1.1.3-SNAPSHOT.jar
          257  2017-01-30 18:07   ca-mediators_1.1.3-SNAPSHOT/artifact.xml
    ...
    
    但是,显然,它并没有得到ESB的认可。 artifact.xml生成的maven-car-plugin文件(完全缺少文档):

    <?xml version="1.0" encoding="UTF-8"?><artifact name="ca-mediators" version="1.1.3-SNAPSHOT" type="lib/library/bundle" serverRole="EnterpriseServiceBus">
        <file>ca-mediators-1.1.3-SNAPSHOT.jar</file>
    </artifact>
    

    如何让ESB获取我的JAR中的类?

1 个答案:

答案 0 :(得分:1)

有关扩展ESB的WSO2 documentation中描述了此问题:

  

当我们通过CAR文件发送介体时,介体只能访问同一CAR文件中可用的工件(序列,代理服务,API)。调解员不在全球范围内。

该解决方案在同一页面上进一步提出:

  • 编写一个参与班级调解员的序列
  • 从包含类介体
  • 的同一CAR文件中打包序列
  • 从其他工件中调用序列

我试过了,结果很好。