当前位置: 首页 > 知识库问答 >
问题:

Mina在Netbeans上工作却在一个肥皂泡里失败了?

伍光济
2023-03-14

奇怪的问题是,如果我们创建一个fat-jar来执行项目,而不是从NetBeans执行,它就会失败。有线索为什么吗?

这是一个简单的apache-camel应用程序,它使用Mina启动一条路由来接收HL7,然后使用一个bean直接回答ACK消息,这是一个简单的示例。

<bean id="hl7codec" class="org.apache.camel.component.hl7.HL7MLLPCodec">
    <property name="charset" value="utf-8"/>
</bean>

<bean id="answerACKHL7" class="com.mycompany.AnswerEMRBean" />    

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route customId="true" id="routeID">
        <from uri="mina:tcp://localhost:8255?sync=true&amp;codec=#hl7codec" />
        <bean ref="answerACKHL7" method="sendACK" />
    </route> 
</camelContext>

该应用程序有另一个java定义的REST路由,但这部分工作在Netbeans和执行jar文件中。

如果我们从Netbeans运行它,并向端口发送一条HL7消息,它就能正常工作。好的,我们用maven-shade-plugin3.2.4构建一个fat-jar,并用java-jar jarfile.jar运行它,一切似乎都开始了,然后我们发送相同的HL7消息,如果运行netbeans并得到一个异常,该消息可以工作。

错误消息副本:Grave:无法传递(ExchangeID上的MessageID:ID-DESKTOP-O7B5GIN-1603385955728-0-1上的ID-DESKTOP-O7B5GIN-1603385955728-0-1)。尝试传递后已耗尽:1已捕获:org.apache.camel.camelExecutionException:在Exchange上执行时发生异常:Exchange[]

RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
[routeID         ] [routeID         ] [from[mina://tcp://localhost:8255?codec=%23hl7codec&sync=true]                 ] [        45]
        ...
[routeID         ] [bean1             ] [bean[ref:answerACKHL7 method:sendACK]                                    ] [         0]

...

Camel版本3.2.0 Java版本1.8.0.221(在Netbeans和命令行中应该是相同的)

共有1个答案

上官修文
2023-03-14

通过对fat jar的depedencies进行着色处理,您需要指导maven插件如何处理重复的资源。在您的情况下,maven-shade-plugin重写了负责类型转换的TypeConverterLoader,因此您得到了没有类型转换器可用于从type:java.lang.String转换为required type异常。

您需要配置maven-shade-plugin来合并该资源。查看如何为camel-main项目创建可执行JAR:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <shadedArtifactAttached>true</shadedArtifactAttached>
                <shadedClassifierName>executable-jar</shadedClassifierName>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>my.package.MainClass</mainClass>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/services/org/apache/camel/TypeConverterLoader</resource>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
 类似资料:
  • 我试图在JAVA中找到一个简单的(ha)SOAP示例,其中包含一个工作服务,但我发现的任何示例都不工作。 我已经试过这个例子中的这个,但是它不起作用,它要求我输入一个正斜杠,但是它已经输入了,没有任何反应。 有人知道我可以下载/请求和修改的SOAP示例链接吗? 谢谢你的帮助。

  • 我有一个对soap Web服务的请求,该服务在SoapUi中运行良好。我想在python脚本中调用此Web服务。 我尝试了一些模块:zeep,泡沫,...但是我总是有一个SSL错误。 以下是信息: https://37.71XXXXXXACONYX?wsdl 基本认证:用户名密码 身份验证类型:抢占式 我在SoapUi中提供了xml。 有人有什么想法吗? 谢谢!! 我试过:

  • 我应该创建一个与wss4j服务对话的soap客户端。。 预期的肥皂消息如下所示: 我有以下内容: 这个配置文件为: config有一个保存在Usb令牌中的证书引用,登录时会询问pin码: 服务接口具有: 但由此产生的soap是: 它还提供 InvalidSecurity处理时发现错误 因此,区别在于:; 必须理解="1",反对必须理解="true" SignatureMethod算法http://

  • 我正在尝试使用Angular2和Http POST对SOAP web服务进行一个非常简单的调用。如果我使用POSTMAN发布相同的消息,只需将内容类型设置为text/xml即可。 对于Angular2,我得到了以下错误:- SEC7120:原点http://localhost:3004在Access Control Allow Origin标头中找不到 SCRIPT7002: XMLHttpReq

  • Windows---------------: Linux---------- 那么,什么是主要的原因是这个问题,看起来一切都好从其他的选择 Apache Maven 3.6.0(97C98EC64A1FDFEE7767CE5FFB20918DA4F719F3;2018-10-24T14:41:47-04:00)Maven主页:/home/user/tools/Maven/apache-maven

  • 我想展平一系列集合: 这失败了: ScalaFiddle。scala:7:错误:scala没有可用的隐式视图。收集不变的设置[_ 但真正让我困惑的是为什么这行得通?: 所以我的问题是:中的flatten和中对flatten的调用有什么区别?