我想问一个关于JAXB将如何维护与生成的类相关联的值的一般性问题。我可以生成这个类,只要它在有效负载中就可以使用它,但是当我转到另一个spring集成过程时,对象似乎不会保留这些值。我知道必须有一种简单的方法来确保生成的对象保留其填充的内容。我可以重新实例化这个类,但这只是一个新的空类。
这是我想完成的事情
要生成的基本XML文档
<ElementA>
<Element1>Value1</Element1>
<Element2>Value2</Element2>
<Element3>
<ElementYY>ValueYY</ElementYY>
</Element3>
</ElementA>
<ElementB>ElementBValue</ElementB>
这将产生
JAXBGeneratedClass
不过我选择得到这个xml可以使用然后我散集它
<!-- JAXB UnMarshalling transformer to generate object from XML -->
<int-xml:unmarshalling-transformer
id="unmarshallMessage"
unmarshaller="xmlMarshaller"
input-channel="input-channel"
output-channel="output-channel" />
然后我在流程流中有其他Spring集成组件,直到我到达一个路由器,在那里我想使用POJO来评估它
<!-- Route it accordingly -->
<int:router
id="jaxb-router"
input-channel="input-router-channel"
ref="evaluationClass"
method="evaluateAction"
default-output-channel="discard-channel">
<int:mapping value="new" channel="new-channel" />
<int:mapping value="update" channel="update-channel" />
<int:mapping value="duplicate" channel="duplicate-channel" />
<int:mapping value="error" channel="error-channel" />
</int:router>
这就是我无法获得对象值的地方,它似乎没有保留它曾经拥有的东西。
@Component("evaluationClass")
public class EvaluationClass {
final Logger log = LogManager.getLogger(EvaluationClass.class);
JAXBGeneratedClass myObject;
public String evaluateAction(Message<?> message) {
/*Use values from myObject*/
/*Do comparison on the message using mObject*/
if (myObject.getElementA().getElement3().getElementYY()
!= message.getPayload().value) {
/* Evaluation */
}
return statusValue;
}
}
我已经想出了几个方法来完成它,所以我没有被困在这上面,但它困扰着我。为什么对象不保留它的价值?或者JAXB bean中是否有我可以打开或配置的东西。我研究过它,尝试过很多东西都无济于事。
戴夫
这是Unmarshaller
<!-- JAXB unmarshalling Transformer bean -->
<bean id="xmlMarshaller" name="xmlMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list value-type="java.lang.Class">
<value>org.agency.schema.jmsupdateservice.ObjectFactory</value>
<value>org.agency.schema.jmsupdateservice.CourtCaseInitiatedNotificationMsg</value>
<value>org.agency.schema.CourtCaseInitiatedNotification</value>
</list>
</property>
<property name="schema" value="classpath:schemas/JMSUpdateService.xsd" />
</bean>
我最初只是在值列表中有对象工厂。
有效载荷:
[Payload CourtCaseInitiatedNotificationMsg content=org.agency.schema.jmsupdateservice.CourtCaseInitiatedNotificationMsg@6671e17f][Headers={JMS_IBM_Character_Set=UTF-8, JMS_IBM_MsgType=8, JMSXUserID=jsg589 , JMS_IBM_Encoding=546, history=caseNumber-inbound-adapter,caseNumber-source-channel,caseNumber-inbound-source-log-service,caseNumber-source-message-logged-channel,caseNumber-xslt-transform,caseNumber-xsltTransform-channel,caseNumber-inbound-filter-valid,caseNumber-xsltTransform-valid-channel,unmarshallCaseNumber,caseNumber-jaxb-channel,caseNumber-jaxb-payload-service,caseNumber-payload-persisted-channel, priority=0, jms_timestamp=1409774002830, JMSXAppID=WebSphere MQ Client for Java, JMS_IBM_PutApplType=28, JMS_IBM_Format=MQSTR , jms_redelivered=false, JMS_IBM_PutDate=20140903, JMSXDeliveryCount=1, JMS_IBM_PutTime=19532283, jms_messageId=ID:414d51204843534f4445564c2e514d4753f24b622007b203, id=f13a0b5b-1e96-394d-e2fa-8578de021f7a, timestamp=1409774011053}]
当对象是有效负载时,我可以使用它,但在此之后,它不会保留CourtCase初始通知Msg中的值。如果我尝试引用该对象,它是null。不应该还能用吗?
我知道这与我发布的内容不同,因为我只是想知道JAXB类的范围和多长时间,或者它是否保留了它作为有效负载时曾经拥有的值。这还能用吗-
再次感谢你的帮助。
戴夫
那么,您可以通过MessageHeaders
来克服您的需求。把你的原始的
有效载荷放置到标头,然后在封送器
之后使用它。这是因为消息的有效负载
在每个变压器
之后都会更改。但是要小心,当你的有效负载是可变的,所以,你在标题中的对象也会被改变。
嗯,很可能没有任何谜团,但我只是不够聪明,不知道我的问题是什么。然而,通常它毕竟是谜团! 很抱歉进行介绍,我的问题是原型范围似乎不适合我。我创建了一个带有Spring集成流的REST服务(流前面有一个http入站网关)。大多数bean的作用域都是原型。我通过使用线程调用它十次来测试流。此外,我还记录了bean引用(只需在被调用的对象中打印“this”),并且我看到了十次相同的引用! 据我所知,这意
问题内容: 我想使用Spring Batch和Spring Integration从数据库导入数据,并将它们写入文件,然后通过ftp将其传输到远程服务器。 但是我想我的问题是我不想为我的表创建域对象。我的查询是随机的,我想要一些可以读取数据并将其写入文件并进行传输的东西。 是否可以在不创建各自的域对象的情况下使用Spring Batch和Integration? 问题答案: 绝对。您可以将JDBC
Spring是一个流行的Web框架,它提供易于集成与很多常见的网络任务。所以,问题是,为什么我们需要Spring,当我们有Struts2?Spring是超过一个MVC框架 - 它提供了许多其它好用的东西,这是不是在Struts。例如:依赖注入可以是有用的任何框架。在本章中,我们将通过一个简单的例子来看看如何集成Spring和Struts2一起。 首先,需要添加下列文件到项目的构建路径从Spring
我正在尝试使用几个s-vaadin、jsp等实现一个应用程序。 它使用简单的,但后来我决定使用vaadin作为ui。 我创建了vaadin servlet(Spring的servlet也留下了)。我的看起来像这样 我创建了vaadin组件并根据我的需要对其进行了调整。我使用自动装配进行服务。 也是一个Spring bean。 < code>ProjectRepository是另一个spring b
我正在使用一个Spring Boot+Spring Security OAuth2应用程序,我相信它的灵感来自Dave Syer的示例。应用程序被配置为OAuth2授权服务器,具有使用资源所有者密码凭据流的单个公共客户端。成功的令牌被配置为JWT。 公共Angular客户机向/oauth/token发送一个POST请求,该请求带有包含客户机id和秘密的基本身份验证头(这是让客户机进行身份验证的最简
问题内容: 任何人都可以在此处粘贴简单的步骤来集成Spring Security和CAS,以进行单点登录和单点退出。注意我不需要任何基于角色的访问。我有一个已经与spring security集成的Web应用程序。现在,我尝试使用CAS执行SSO,但是出现此错误 这是我当前的spring security.xml 这是我的web.xml 这是我的Spring-rootcontext.xml 这是我