我在这一行上有一个输入XML:
<Holding id="12">
<Policy>
<HoldingForm tc="1">Individual</HoldingForm>
<PolNumber>848433</PolNumber>
<LineOfBusiness tc="1">Life</LineOfBusiness>
<CarrierCode>67644</CarrierCode>
</Policy>
</Holding>
Run Code Online (Sandbox Code Playgroud)
我对此XML的操作取决于if <PolNumber>
(它是模式中的可选元素)是否具有值.我正在使用Mule 3.3 xpath
求值程序执行此操作,我的XPath表达式看起来像这样:
<expression-filter expression="#[xpath('//acord:Holding/acord:Policy/acord:PolNumber').text != empty]"/>
Run Code Online (Sandbox Code Playgroud)
只要<PolNumber>
元素存在或者<PolNumber/>
是空元素,这就可以正常工作.但如果<PolNumber>
不存在,则上面的表达式抛出异常.
我试着用XPath的布尔函数,但返回true
的<PolNumber/>
.有没有更好的方法来检查元素是否存在且非空?
编辑:
这是我的mule配置中命名空间管理器的配置
<xm:namespace-manager includeConfigNamespaces="true">
<xm:namespace prefix="acord" uri="http://ACORD.org/Standards/Life/2" />
<xm:namespace prefix="soap" uri="http://schemas.xmlsoap.org/soap/encoding/" />
</xm:namespace-manager>
Run Code Online (Sandbox Code Playgroud) 在我的应用程序obj.getClass().isArray()
中非常频繁地调用并成为应用程序的瓶颈.
如果对象是数组,我想在运行时有效地检查.原始数组和对象数组应返回true.
我可以想象的方式是instanceof
所有原始数组,但不能处理类似int [] []的类型.该应用程序用作lib,因此我无法列出所有类型.
那有什么线索吗?
我想对我的方法参数进行空检查,比如参数不应为null.可以assertNotNull("Map should not be null", filePaths);
在我的Java代码中使用这样的东西吗?我想避免
if(filePaths == null){
throw new IllegalArgumentException("Maps cannot be null");
}
Run Code Online (Sandbox Code Playgroud)
只是为了保持我的代码清除所有这些空检查.我知道我可以写一个Validator
属于我自己的类并且有重载的notNull
方法但是有一些现有的并且易于使用而不能重新发明轮子.
我看到使用的唯一缺点JUnit
Assert
是它抛出AssertionError
而不是IllegalArgumentException
等等.
java junit exception-handling exception illegalargumentexception
我有一个关于Mule的上下文属性占位符的问题,我有两个文件设置如下:
<context:property-placeholder location="classpath:mule-app-1.properties, file:///etc/mule/conf/mule-app-2.properties" />
Run Code Online (Sandbox Code Playgroud)
首先这是一个有效的配置,其次哪个文件优先于另一个?app1或app2文件?
-S
不久之后,我用Java开发了一个只有1个GET资源的Restful服务.它是这样访问的:
获取http:// localhost:8080/my-project/customers/transactions
此GET请求返回所有客户事务.
现在,我有另一个项目请求,他们希望在同一个数据库中的不同模式中插入客户事务.我认为不是创建其他服务而是可以增强此服务,因为底层数据库是相同的,而且是关于客户事务.
所以,我在我的服务界面中创建了另一个方法,我createCustomerTransactions
想将它命名为与我的GET请求相同,但是这个将是这样的POST:
POST http:// localhost:8080/my-project/customers/transactions
我使用Soap-UI测试了这个并且它可以工作.我的问题是做Restful的正确方法.可以让GET和POST同时具有相同的url,虽然它们会指向不同的实际方法吗?我不擅长名字,所以不能提出另一个更好的资源名称.
要在linux中安装java(我使用的是CentOS,RHEL也一样),我使用了这个命令
rpm -Uvh /path/to/binary/jdk-7u55-linux-x64.rpm
并验证了java
java -version
看一个教程,它说要运行以下4个命令,不知道为什么
## java ##
alternatives --install /usr/bin/java java /usr/java/latest/jre/bin/java 200000
## javaws ##
alternatives --install /usr/bin/javaws javaws /usr/java/latest/jre/bin/javaws 200000
## Install javac only
alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 200000
## jar ##
alternatives --install /usr/bin/jar jar /usr/java/latest/bin/jar 200000
Run Code Online (Sandbox Code Playgroud)
我知道如果安装了多个版本的java,您可以选择要使用的版本
alternatives --config java
Run Code Online (Sandbox Code Playgroud)
那么为什么要alternative --install
为每个可执行文件单独运行
我已经看到了 这个问题,但没有得到我的答案
我有一个Soap请求进入骡子流.我的任务是从有效负载中获取信息,并根据结果将原始请求推送到不同的jms队列.
为了从有效负载中获取所需信息,我使用的是XSLT转换器(不是XPath,因为我需要从一个元素获取IDREF属性,基于IDREF,从IDREF对象中获取元素然后是一个子元素).
基于XSLT转换的结果,我使用choice元素来推送原始有效负载.我将原始有效负载存储在会话中(也可以在入站中执行).在XSLT转换后,应用选择路由器以找出适当的队列,然后将原始有效负载推入队列(存储在会话变量中的原始有效负载).我正在使用<expression-component>
元素.下面是mule-flow的片段:
<flow name="ProcessXML121Order">
<jms:inbound-endpoint queue="mviq.121.order" exchange-pattern="one-way" />
<logger message="121 order payload is #[payload]" level="INFO" />
<message-properties-transformer scope="session">
<add-message-property key="mviPayload" value="#[payload]"/>
</message-properties-transformer>
<xm:xslt-transformer xsl-file="chooseVendor.xslt" />
<logger message="After xsl file payload is #[payload]" level="INFO" />
<choice>
<when expression="'EMSI'">
<logger message="Vendor is EMSI" level="INFO" />
<expression-component>payload=#[header:SESSION:mviPayload]</expression-component>
<jms:outbound-endpoint queue="mviq.121.order.emsi" />
</when>
<when expression="'PRMD'">
<logger message="Vendor is PRMD" level="INFO" />
<jms:outbound-endpoint queue="mviq.121.order.prmd" />
</when>
<when expression="'RSA'">
<logger message="Vendor is RSA" level="INFO" />
<logger message="RSA payload is #[payload]" level="INFO" />
<jms:outbound-endpoint queue="mviq.121.order.rsa" …
Run Code Online (Sandbox Code Playgroud) 在Windows 7中启动mule服务器时出现以下问题.
我已JAVA_HOME
和MULE_HOME
正常.
MULE_HOME is set to C:\BAM\Linux\fresh\mule-standalone-3.3.1\mule-standalone-3.3.1 Running in console/foreground mode by default, use Ctrl-C to exit...
--> Wrapper Started as Console Launching a JVM... Unable to execute Java command. The system cannot find the file specified. (0x2)
"java" -Dmule.home="C:\BAM\Linux\fresh\mule-standalone-3.3.1\mule-standalone-3.3.1"
-Dmule.base="C:\BAM\Linux\fresh\mule-standalone-3.3.1\mule-standalone-3. :MaxPermSize=128m "-Djava.endorsed.dirs=C:\BAM\Linux\fresh\mule-standalone-3.3.1\mule-standalone-3.3.1\lib\endorsed"
-Xmx512m -Djava.library.path="%LD_LIBRARY_P
3.3.1\mule-standalone-3.3.1/lib/boot" -classpath "%MULE_LIB%;C:\BAM\Linux\fresh\mule-standalone-3.3.1\mule-standalone-3.3.1/conf;C:\BAM\Linux\fresh\mule-standal /commons-cli-1.2.jar;C:\BAM\Linux\fresh\mule-standalone-3.3.1\mule-standalone-3.3.1/lib/boot/log4j-1.2.16.jar;C:\BAM\Linux\fresh\mule-standalone-3.3.1\mule-stan .3.1.jar;C:\BAM\Linux\fresh\mule-standalone-3.3.1\mule-standalone-3.3.1/lib/boot/mule-module-logging-3.3.1.jar;C:\BAM\Linux\fresh\mule-standalone-3.3.1\mule-sta t-3.3.1.jar;C:\BAM\Linux\fresh\mule-standalone-3.3.1\mule-standalone-3.3.1/lib/boot/wrapper-3.2.3.jar"
-Dwrapper.key="IqO3S6Ox0DeEiEkH" -Dwrapper.port=32000 -Dw port.max=31999 -Dwrapper.pid=3224 -Dwrapper.version="3.2.3"
-Dwrapper.native_library="wrapper" -Dwrapper.cpu.timeout="10" -Dwrapper.jvmid=1 org.mule.module.rebo Critical error: wait for JVM process failed Press any key to continue . . …
Run Code Online (Sandbox Code Playgroud) 我面临的情况是我们不能使用模式来验证传入的请求(基本上架构在那里,但它接受请求中的任何字符串,wsdl设计者有自己的理由来接受来自不同来源的请求和灵活性).但是当收到请求时,我验证请求包装器的子元素是我们期望的(使用XPath).现在,如果子元素是不是有什么期望,我想抛出Soap Fault
与Client
代码,并且可包括架构验证失败,请求不包含有效的元素错误信息.
我正在使用Mule 3.3并XPath
在<choice>
元素中进行验证,我想在<otherwise>
块中抛出异常.
Soap Fault
手动投掷骡子流和outInterceptor
会解决目的,因为我没有使用schemaValidation
属性<cxf:proxyService>
.这是我流程的一部分
<http:inbound-endpoint address="${service.address}" exchange-pattern="request-response">
<cxf:proxy-service wsdlLocation="classpath:service.wsdl" namespace="http://company.com/services/service" service="CompanyService" />
</http:inbound-endpoint>
<choice>
<when>.....</when>
<otherwise><!-- Here I want to throw Soap Fault ---></otherwise>
</choice>
<catch-exception-strategy>
<flow-ref name="generateErrorResponse" />
</catch-exception-strategy>
Run Code Online (Sandbox Code Playgroud) 我有一个肥皂服务流程,通过它获取入站请求<cxf:proxy-service>
.我在它之后有一个有效负载,以获得有效负载作为字符串.
这是我的流程:
<flow name="soapService">
<http:inbound-endpoint address="${service.address}" exchange-pattern="request-response">
<cxf:proxy-service wsdlLocation="classpath:service.wsdl" namespace="http://pennmutual.com/services/mvi" service="MVIService" enableMuleSoapHeaders="false"/>
</http:inbound-endpoint>
<set-payload value="#[message.payloadAs(java.lang.String)]"/>
.
.
.
</flow>
Run Code Online (Sandbox Code Playgroud)
<set-payload value="#[message.payloadAs(java.lang.String)]"/>
有效,但如果我用它替换它<object-to-string-transformer>
,它不起作用.
这两个本身有何不同?
更新:
关于更换<set-payload value="#[message.payloadAs(java.lang.String)]"/>
用<object-to-string-transformer>
在我的上述流程,#[payload]
使com.ctc.wstx.sr.ValidatingStreamReader@429eb61a
代替atcualXML
在如下的流程中:
<flow name="fileFlow">
<file:inbound-endpoint path="/inbound/ftp/sbc" pollingFrequency="30000" fileAge="30000" moveToDirectory="/inbound/ftp/sbc/archive">
<file:filename-wildcard-filter pattern="*.xml" caseSensitive="false"/>
</file:inbound-endpoint>
<logger message="Entering #[flow.name] flow" level="INFO"/>
<component class="com.abc.RequestFile"/>
<logger message="Payload after transformation is: #[payload] flow" level="INFO"/>
<vm:outbound-endpoint path="merge" />
<logger message="Exiting #[flow.name] flow" level="INFO"/>
</flow>
Run Code Online (Sandbox Code Playgroud)
我得到InputStream
的file:inbound-endpoint
这是传递给RequestFile
组件.该组件需要返回一个文件列表,其中一个文件是原始文件读取和传递的文件.我正在寻找一个解决方案,而不是手动将InputStream复制到java组件中的File.
我有一个私人流程,由许多公共流程共享使用flow-ref
.我希望MEL
使用Mule 3.3.0 在私有流中获取调用者流名称.那可能吗?
我在Oracle数据库中有一个接近120,000,000条记录的客户端.他们的工程师声称他们只能给我们一个数据库的ms访问转储.数据实际上将进入MySQL关系数据库实例.
我们可以期待从Oracle> Access> MySQL中获得哪些潜在问题和问题?
我们找到了可以将oracle db转换为MySQL的工具,但由于数据库100gb +的大型特性,我不确定这些基于软件的解决方案的稳定性来处理转换过程.这是一个时间敏感的项目,我担心如果我们在一开始就犯了任何错误,我们可能无法及时完成.