Я пытаюсь создать XML-запрос SOAP, который включает несколько пространств имен, используя действие smooks и соблазнение freemarker. Вот мой фрагмент кода в jboss-esb.xml, а smooks-upgraded-right-now-query.xml — это файл шаблона, в котором я создаю запрос клиента SOAP к веб-службе.
Jboss-esb.xml
<action class="org.jboss.soa.esb.smooks.SmooksAction" name="create-right-now-details-query">
<property name="smooksConfig" value="/smooks/smooks-upgraded-right-now-query.xml"/>
<property name="resultType" value="STRING" />
</action>
<action class="org.jboss.soa.esb.actions.SystemPrintln" name="printMessageRequest">
<property name="message" value="GetInfoFromRightNow before request"/>
<property name="printfull" value="true"/>
</action>
Ниже приведен файл smooks-upgrade-right-now-query.xml.
smooks-upgrade-right-now-query.xml
<?xml version="1.0" encoding="UTF-8"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd">
<params>
<param name="inputType">input.java</param>
<param name="stream.filter.type">SAX</param>
<param name="input.java" type="input.type.actived">com.ws.custom.Update</param>
</params>
<ftl:freemarker applyOnElement="#document">
<ftl:template><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v11="urn:basews.customws.com/v1_2" xmlns:v12="urn:objectws.customws.com/v1_2">
<soapenv:Header>
<ns7:ClientInfoHeader soapenv:mustUnderstand="0" xmlns:ns7="urn:messages.ws.customws.com/v1_2">
<ns7:AppID>Appid01</ns7:AppID>
</ns7:ClientInfoHeader>
<wsse:Security mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>user</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
</soapenv:Envelope>]]></ftl:template>
<param name="rootElementName">Envelope</param>
<param name="messageType">XML</param>
</ftl:freemarker>
<resource-config selector="#document">
<resource>org.milyn.delivery.DomModelCreator</resource>
</resource-config>
</smooks-resource-list>
Как вы можете видеть выше, я просто создаю заголовок SOAP, который включает в себя обычный текст. Я не читаю никаких входных данных из предыдущих сообщений в конвейере действий.
Я могу распечатать этот заголовок SOAP с помощью действия SystemPrintln тогда и только тогда, когда элемент <wsse:Password>
удален из приведенного выше шаблона. Так случилось, даже если я использую шаблоны xslt. Я не понимаю, неправильно ли интерпретируется этот элемент пароля синтаксическим анализатором smooks.
Единственное полезное сообщение, которое я вижу в журнале, это [org.milyn.delivery.AbstractParser] (pool-96-thread-1:) XMLReader property 'http://xml.org/sax/properties/lexical-handler' not recognized by XMLReader 'org.milyn.delivery.java.XStreamXMLReader'.
Любая подсказка приветствуется.