我有一个代理,需要对来自服务的输出消息进行XSL转换。我附加了序列文件和XSL文件(在synaptic-configs / local-entries中)。
感谢您是否可以提示我可能出错的地方。
这是序列文件:
<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="EmpMergeOutSeq1" trace="enable" statistics="enable">
<log level="full">
<property name="sequence" value="Final Transform using XSLT - begin"/>
</log>
<xslt key="getEmployeeByIdResponseXlt"/>
<send/>
</sequence>
这是XSL文件:
<?xml version="1.0" encoding="UTF-8"?>
<localEntry xmlns="http://ws.apache.org/ns/synapse" key="getEmployeeByIdResponseXlt">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ax21="http://domain.hrapp.gunith/xsd" xmlns:ns="http://service.hrapp.gunith" xmlns:fn="http://www.w3.org/2005/02/xpath-functions" version="2.0" exclude-result-prefixes="ns fn">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="//ns:getEmployeeByIdResponse"/>
</xsl:template>
<xsl:template xmlns:ns="http://samples.esb.wso2.org" match="ns:getEmployeeByIdResponse">
<ns1:getEmployeeByIdResponse xmlns:ns1="http://service.proxy.gunith">
<ns1:return xmlns:ax22="http://domain.proxy.gunith/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax22:Employee">
<ax22:dob>
<xsl:value-of select="ns:return/ax21:dob"/>
</ax22:dob>
<ax22:firstName>
<xsl:value-of select="ns:return/ax21:firstName"/>
</ax22:firstName>
<ax22:id>
<xsl:value-of select="ns:return/ax21:id"/>
</ax22:id>
<ax22:lastName>
<xsl:value-of select="ns:return/ax21:lastName"/>
</ax22:lastName>
<ax22:middleName>
<xsl:value-of select="ns:return/ax21:middleName"/>
</ax22:middleName>
</ns1:return>
</ns1:getEmployeeByIdResponse>
</xsl:template>
</xsl:stylesheet>
</localEntry>
以下是日志条目(显示错误和传递的实际消息):
[2012-08-04 11:35:44,966] INFO - LogMediator To: /services/MergedBasicEmployeesProxy.MergedBasicEmployeesProxyHttpSoap12Endpoint, WSAction: urn:getEmployeeById, SOAPAction: urn:getEmployeeById, MessageID: urn:uuid:c80fb5a4-41e4-4de4-924d-a18af37b5056, Direction: request, sequence = inSequence - request for EmpMergeProxy, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><p:getEmployeeById xmlns:p="http://service.proxy.gunith"><!--0 to 1 occurrence--><xs:args0 xmlns:xs="http://service.proxy.gunith">1</xs:args0></p:getEmployeeById></soapenv:Body></soapenv:Envelope>
[2012-08-04 11:35:44,970] INFO - LogMediator To: /services/MergedBasicEmployeesProxy.MergedBasicEmployeesProxyHttpSoap12Endpoint, WSAction: urn:getEmployeeById, SOAPAction: urn:getEmployeeById, MessageID: urn:uuid:c80fb5a4-41e4-4de4-924d-a18af37b5056, Direction: request, sequence = inSequence - request for EmpMergeProxy, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><sam:getEmployeeById xmlns:sam="http://service.hrapp.gunith">
<sam:args0>1</sam:args0>
</sam:getEmployeeById></soapenv:Body></soapenv:Envelope>
[2012-08-04 11:35:45,504] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:ea979246-adbc-494d-bd55-e3ed25171984, Direction: response, sequence = Final Transform using XSLT - begin, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns:getEmployeeByIdResponse xmlns:ns="http://service.hrapp.gunith"><ns:return xmlns:ax21="http://domain.hrapp.gunith/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax21:Employee"><ax21:dob>1984-03-01</ax21:dob><ax21:firstName>Gunith</ax21:firstName><ax21:id>1</ax21:id><ax21:lastName>Dev</ax21:lastName><ax21:middleName>E</ax21:middleName></ns:return></ns:getEmployeeByIdResponse></soapenv:Body></soapenv:Envelope>
[2012-08-04 11:35:45,505] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:2eb104c0-53c9-4155-8fef-99e7600b7559, Direction: response, sequence = Final Transform using XSLT - begin, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns:getEmployeeByIdResponse xmlns:ns="http://service.hrapp.gunith"><ns:return xmlns:ax21="http://domain.hrapp.gunith/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax21:Employee"><ax21:dob>1984-03-01</ax21:dob><ax21:firstName>Gunith</ax21:firstName><ax21:id>1</ax21:id><ax21:lastName>Dev</ax21:lastName><ax21:middleName>E</ax21:middleName></ns:return></ns:getEmployeeByIdResponse></soapenv:Body></soapenv:Envelope>
[2012-08-04 11:35:45,528] ERROR - XSLTMediator Unable to perform XSLT transformation using : Value {name ='null', keyValue ='getEmployeeByIdResponseXlt'} against source XPath : s11:Body/child::*[position()=1] | s12:Body/child::*[position()=1]
org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '1' (code 49) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
at org.apache.axiom.om.impl.llom.OMDocumentImpl.getOMDocumentElement(OMDocumentImpl.java:109)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.getDocumentElement(StAXOMBuilder.java:570)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.getDocumentElement(StAXOMBuilder.java:566)
at org.apache.synapse.util.jaxp.StreamResultBuilder.getNode(StreamResultBuilder.java:87)
at org.apache.synapse.mediators.transform.XSLTMediator.performXSLT(XSLTMediator.java:298)
at org.apache.synapse.mediators.transform.XSLTMediator.mediate(XSLTMediator.java:191)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:229)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:370)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:160)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181)
at org.apache.synapse.transport.nhttp.ClientWorker.run(ClientWorker.java:275)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:173)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)
谢谢!
答案 0 :(得分:2)
之前我遇到过类似的问题。通常在XSLT转换期间处理命名空间时。 WSO2默认使用xalan.jar作为xml解析器,它必须由saxon9he.jar替换。以下网址供您参考"How to change the XSLT processor"
感谢。
答案 1 :(得分:1)
问题出在你的xslt脚本中..你可以做的是尝试在eclipse /任何其他xslt处理器中输入soap消息作为此xslt脚本的输入xml并运行..如果脚本是正确的,你将获得输出else不...