2013-02-26 85 views
0

我在mule config xml中有一个变量,我想在Java文件中访问它。我怎么做? 我发现下面的方法:如何将变量从xml传递给java类中的mule?

  • 使用组件
  • 采用变压器
  • 使用脚本如常规

我想给该变量的java文件,我将其导入到数据库中java文件。 我的配置是:

<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" 
xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf" xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting" 
xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
xmlns:spring="http://www.springframework.org/schema/beans" version="CE-3.3.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation=" 
    http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
    http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/current/mule-cxf.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
    http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
    http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd "> 

<set-variable variableName="remoteClientAddress" 
    value="#[message.inboundProperties['MULE_REMOTE_CLIENT_ADDRESS']]" /> 
<message-properties-transformer name="setProperty" 
    scope="session" doc:name="Message Properties"> 
    <add-message-property key="remoteClientAddress" 
     value="#[message.inboundProperties['MULE_REMOTE_CLIENT_ADDRESS']]" /> 
</message-properties-transformer> 


<flow name="service-cxf-wsdlfirstFlow1" doc:name="service-cxf-wsdlfirstFlow1"> 
    <http:inbound-endpoint host="localhost" port="8085" 
     path="Weather/Service" exchange-pattern="request-response" doc:name="HTTP"> 
    </http:inbound-endpoint> 
    <set-variable variableName="remoteClientAddress" 
     value="#[message.inboundProperties['MULE_REMOTE_CLIENT_ADDRESS']]" /> 
    <message-properties-transformer doc:name="myproperty" 
     scope="session"> 
     <add-message-property key="remoteClientAddress" 
      value="#[message.inboundProperties['MULE_REMOTE_CLIENT_ADDRESS']]" /> 
    </message-properties-transformer> 

    <component doc:name="classTest" class="org.mule.example.scripting.IpClient" /> 

    <logger 
     message="#[groovy:message.getInboundProperty('MULE_REMOTE_CLIENT_ADDRESS')]" 
     level="INFO" doc:name="Logger" /> 
    <cxf:proxy-service payload="envelope" service="Weather" 
     wsdlLocation="http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl" 
     namespace="http://ws.cdyne.com/WeatherWS/" validationEnabled="true" 
     doc:name="SOAP"> 
    </cxf:proxy-service> 

    <copy-properties propertyName="SOAPAction" doc:name="Property" /> 

    <cxf:proxy-client payload="body" 
     enableMuleSoapHeaders="true" doc:name="SOAP" /> 

    <outbound-endpoint address="http://wsf.cdyne.com/WeatherWS/Weather.asmx" 
     exchange-pattern="request-response" doc:name="Generic"> 
    </outbound-endpoint> 


</flow> 

我的骡子的版本是3.3.0 CE。我使用的组件,用于定义Java类的位置,但在运行我的项目后,我有一些错误:

ERROR 2013-02-27 11:15:20,129 [[mule-sample_].connector.http.mule.default.receiver.02] org.mule.exception.DefaultMessagingExceptionStrategy: 

Message    : Failed to find entry point for component, the following resolvers tried but failed: [ 
CallableEntryPointResolver: Object "IpClient{this=1e68a2b, name='null', ignoreBadInput=false, returnClass=SimpleDataType{type=java.lang.Object, mimeType='*/*'}, sourceTypes=[]}" does not implement required interface "interface org.mule.api.lifecycle.Callable" 
ReflectionEntryPointResolver: Found too many possible methods on object "org.mule.example.scripting.IpClient" that accept parameters "{class java.lang.String}", Methods matched are "[public void org.mule.transformer.AbstractTransformer.setMimeType(java.lang.String) throws javax.activation.MimeTypeParseException, public final java.lang.Object org.mule.transformer.AbstractTransformer.transform(java.lang.Object) throws org.mule.api.transformer.TransformerException, public void org.mule.transformer.AbstractTransformer.setName(java.lang.String), public void org.mule.transformer.AbstractTransformer.setEncoding(java.lang.String)]" 
AnnotatedEntryPointResolver: Component: IpClient{this=1e68a2b, name='null', ignoreBadInput=false, returnClass=SimpleDataType{type=java.lang.Object, mimeType='*/*'}, sourceTypes=[]} doesn't have any annotated methods, skipping. 
MethodHeaderPropertyEntryPointResolver: The required property "method" is not set on the event 
] 
Code     : MULE_ERROR-321 
-------------------------------------------------------------------------------- 
Exception stack is: 
1. Failed to find entry point for component, the following resolvers tried but failed: [ 
CallableEntryPointResolver: Object "IpClient{this=1e68a2b, name='null', ignoreBadInput=false, returnClass=SimpleDataType{type=java.lang.Object, mimeType='*/*'}, sourceTypes=[]}" does not implement required interface "interface org.mule.api.lifecycle.Callable" 
ReflectionEntryPointResolver: Found too many possible methods on object "org.mule.example.scripting.IpClient" that accept parameters "{class java.lang.String}", Methods matched are "[public void org.mule.transformer.AbstractTransformer.setMimeType(java.lang.String) throws javax.activation.MimeTypeParseException, public final java.lang.Object org.mule.transformer.AbstractTransformer.transform(java.lang.Object) throws org.mule.api.transformer.TransformerException, public void org.mule.transformer.AbstractTransformer.setName(java.lang.String), public void org.mule.transformer.AbstractTransformer.setEncoding(java.lang.String)]" 
AnnotatedEntryPointResolver: Component: IpClient{this=1e68a2b, name='null', ignoreBadInput=false, returnClass=SimpleDataType{type=java.lang.Object, mimeType='*/*'}, sourceTypes=[]} doesn't have any annotated methods, skipping. 
MethodHeaderPropertyEntryPointResolver: The required property "method" is not set on the event 
] (org.mule.model.resolvers.EntryPointNotFoundException) 
org.mule.model.resolvers.DefaultEntryPointResolverSet:52 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/model/resolvers/EntryPointNotFoundException.html) 
-------------------------------------------------------------------------------- 
Root Exception stack trace: 
org.mule.model.resolvers.EntryPointNotFoundException: Failed to find entry point for component, the following resolvers tried but failed: [ 
CallableEntryPointResolver: Object "IpClient{this=1e68a2b, name='null', ignoreBadInput=false, returnClass=SimpleDataType{type=java.lang.Object, mimeType='*/*'}, sourceTypes=[]}" does not implement required interface "interface org.mule.api.lifecycle.Callable" 
ReflectionEntryPointResolver: Found too many possible methods on object "org.mule.example.scripting.IpClient" that accept parameters "{class java.lang.String}", Methods matched are "[public void org.mule.transformer.AbstractTransformer.setMimeType(java.lang.String) throws javax.activation.MimeTypeParseException, public final java.lang.Object org.mule.transformer.AbstractTransformer.transform(java.lang.Object) throws org.mule.api.transformer.TransformerException, public void org.mule.transformer.AbstractTransformer.setName(java.lang.String), public void org.mule.transformer.AbstractTransformer.setEncoding(java.lang.String)]" 
AnnotatedEntryPointResolver: Component: IpClient{this=1e68a2b, name='null', ignoreBadInput=false, returnClass=SimpleDataType{type=java.lang.Object, mimeType='*/*'}, sourceTypes=[]} doesn't have any annotated methods, skipping. 
MethodHeaderPropertyEntryPointResolver: The required property "method" is not set on the event 
] 
at org.mule.model.resolvers.DefaultEntryPointResolverSet.invoke(DefaultEntryPointResolverSet.java:52) 
at org.mule.component.DefaultComponentLifecycleAdapter.invoke(DefaultComponentLifecycleAdapter.java:343) 
at org.mule.component.AbstractJavaComponent.invokeComponentInstance(AbstractJavaComponent.java:86) 
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) 
+1

在mule-config中提供有关您的变量的更多详细信息。 – user1760178 2013-02-26 16:24:57

+0

我有以下代码:''我想要发送remoteClientAddress到java文件。 – 2013-02-27 06:57:55

+0

你的组件是否实现了Mule的Callable接口? – user1760178 2013-02-27 14:42:57

回答

1

按鳕eoyu给添加属性

<set-variable variableName="remoteClientAddress" value ="#[message.inboundProperties ['MULE_REMOTE_CLIENT_ADDRESS']]"/> 

此套将该属性放入INVOCATION范围的mulemessage中。

@Override 
public Object onCall(MuleEventContext eventContext) throws Exception { 
    MuleMessage msg = eventContext.getMessage(); 

    String remClient = msg.getProperty("remoteClientAddress", PropertyScope.INVOCATION); 

希望这有助于:

你可以用下面的代码行

msg.getProperty("remoteClientAddress", PropertyScope.INVOCATION); 

EX访问您IpClient组件的属性。

+0

谢谢,它对我来说工作正常。 :) – 2013-03-02 05:38:40

0
<message-properties-transformer name="myScope" scope="session"> 
    <add-message-property key="remoteClientAddress" 
     value ="#[message.inboundProperties['MULE_REMOTE_CLIENT_ADDRESS']]" /> 
</message-properties-transformer> 
+1

您可以添加一些解释和细节来帮助OP了解您的答案吗? – flash 2013-02-27 06:42:17

+0

感谢您的回答,但是何时定义我的java类的位置,然后将我的变量传递给它? – 2013-02-27 06:56:45

+0

我想在此路径(org.mule.example.scripting.IpClient)中将remoteClientAddress传递给java类,何时应该定义此路径? – 2013-02-27 07:11:15