小编Cha*_*ana的帖子

如果元素存在且非空,如何判断使用XPath?

我在这一行上有一个输入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)

xml xpath mule

20
推荐指数
2
解决办法
6万
查看次数

Object.isArray()很慢,有没有快速的方法呢?

在我的应用程序obj.getClass().isArray()中非常频繁地调用并成为应用程序的瓶颈.
如果对象是数组,我想在运行时有效地检查.原始数组和对象数组应返回true.
我可以想象的方式是instanceof所有原始数组,但不能处理类似int [] []的类型.该应用程序用作lib,因此我无法列出所有类型.
那有什么线索吗?

java performance

19
推荐指数
2
解决办法
823
查看次数

是否可以在Java生产代码中使用Junit Assert API

我想对我的方法参数进行空检查,比如参数不应为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

12
推荐指数
2
解决办法
1767
查看次数

Mule ESB:上下文属性占位符

我有一个关于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

spring esb mule

11
推荐指数
1
解决办法
1万
查看次数

是否可以为get和post rest api使用相同的资源名称

不久之后,我用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,虽然它们会指向不同的实际方法吗?我不擅长名字,所以不能提出另一个更好的资源名称.

rest jax-rs restful-url restful-architecture

10
推荐指数
1
解决办法
8236
查看次数

何时以及为什么运行替代方案 - 在linux上安装jdk时安装java jar javac javaws

要在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为每个可执行文件单独运行

我已经看到了 这个问题,但没有得到我的答案

java linux redhat

9
推荐指数
1
解决办法
1万
查看次数

如何覆盖mule中的有效负载

我有一个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)

mule

5
推荐指数
1
解决办法
1万
查看次数

mule-standalone-3.3.1无法在Windows 7上启动

在Windows 7中启动mule服务器时出现以下问题.

我已JAVA_HOMEMULE_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)

mule

3
推荐指数
1
解决办法
5770
查看次数

如何在mule中手动抛出Soap Fault

我面临的情况是我们不能使用模式来验证传入的请求(基本上架构在那里,但它接受请求中的任何字符串,wsdl设计者有自己的理由来接受来自不同来源的请求和灵活性).但是当收到请求时,我验证请求包装器的子元素是我们期望的(使用XPath).现在,如果子元素是不是有什么期望,我想抛出Soap FaultClient代码,并且可包括架构验证失败,请求不包含有效的元素错误信息.

我正在使用Mule 3.3并XPath<choice>元素中进行验证,我想在<otherwise>块中抛出异常.

  1. 有没有办法Soap Fault手动投掷骡子流和
  2. 如何添加自定义故障字符串.我不确定是否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)

soap cxf mule

3
推荐指数
1
解决办法
2624
查看次数

Mule <object-to-string-transformer>与message.getPatyloadAsString()的不同之处

我有一个肥皂服务流程,通过它获取入站请求<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

mule

3
推荐指数
1
解决办法
8316
查看次数

如何从文件中获取原始文件:mule中的outbound-endpoint

在如下的流程中:

<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)

我得到InputStreamfile:inbound-endpoint这是传递给RequestFile组件.该组件需要返回一个文件列表,其中一个文件是原始文件读取和传递的文件.我正在寻找一个解决方案,而不是手动将InputStream复制到java组件中的File.

mule

2
推荐指数
1
解决办法
1166
查看次数

如何在Mule的私有流中获取调用者流名称

我有一个私人流程,由许多公共流程共享使用flow-ref.我希望MEL使用Mule 3.3.0 在私有流中获取调用者流名称.那可能吗?

mule

1
推荐指数
1
解决办法
3427
查看次数

从Oracle到MS-Access到Mysql

我在Oracle数据库中有一个接近120,000,000条记录的客户端.他们的工程师声称他们只能给我们一个数据库的ms访问转储.数据实际上将进入MySQL关系数据库实例.

我们可以期待从Oracle> Access> MySQL中获得哪些潜在问题和问题?

我们找到了可以将oracle db转换为MySQL的工具,但由于数据库100gb +的大型特性,我不确定这些基于软件的解决方案的稳定性来处理转换过程.这是一个时间敏感的项目,我担心如果我们在一开始就犯了任何错误,我们可能无法及时完成.

mysql sql database oracle ms-access

0
推荐指数
1
解决办法
108
查看次数