2016-08-18 3 views
1

나는 등의 대한-각 그룹 요소를 사용하여 XML을 변환하기 위해 노력하고있어 :XSLT for-each-group은 Apache Camel에서 지원되지 않습니까?

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/orders"> 
     <myElem> 
      <xsl:for-each-group select="order" group-by="identifier/value"> 
       <xsl:sort select="current()/date" order="descending" /> 
       <xsl:apply-templates select="current()" /> 
      </xsl:for-each-group> 
     </myElem> 
    </xsl:template> 
</xsl:stylesheet> 

내 소스 문서 : 아무리 내가 변환 된 XML과 함께 끝 않는 것을

<?xml version="1.0" encoding="UTF-8"?> 
<orders> 
    <order> 
     <identifier> 
      <value>Order489</value> 
     </identifier> 
     <date>2016-08-10T15:39:16</date> 
     <customer> 
      <id>***</id> 
      <address>***</address> 
     </customer> 
     ... 
    </order> 
    <order> 
     <identifier> 
      <value>Order490</value> 
     </identifier> 
     <date>2016-08-10T15:42:34</date> 
     <customer> 
      <id>***</id> 
      <address>***</address> 
     </customer> 
     ... 
    </order> 
</orders> 

하늘의 루트 요소

필자는 POM에 낙타 - 색슨 의존성을 포함 시켰으며이 기능은 Karaf 컨테이너에 설치되었습니다.

의 엔드 포인트 :이 기능은 낙타로 색슨 구성 요소에 의해 지원되지 않는다는 생각하기 시작하고있어

<to uri="xslt:/xsl/foo.xsl?transformerFactoryClass=net.sf.saxon.TransformerFactoryImpl" /> 

. 나는 내가 길을 찾을 때까지 아무런 실수를하지 않는다는 것이 이상하다는 것을 알게된다.

업데이트 내가 지금 내 번들을 시작할 때 나는 다음과 같은 스택 트레이스 얻을 것으로 나타났습니다

: 나는 어딘가에 종속 없거나이 노골적으로 낙타에서 지원되지 않습니다이다, 그래서

"select" attribute is not allowed on the xsl:for-each-group element!; Line#: 10; Column#: 99 
javax.xml.transform.TransformerException: "select" attribute is not allowed on the xsl:for-each-group element! 
    at org.apache.xalan.processor.StylesheetHandler.error(StylesheetHandler.java:904)[:] 
    at org.apache.xalan.processor.StylesheetHandler.error(StylesheetHandler.java:947)[:] 
    at org.apache.xalan.processor.XSLTElementProcessor.setPropertiesFromAttributes(XSLTElementProcessor.java:347)[:] 
    at org.apache.xalan.processor.XSLTElementProcessor.setPropertiesFromAttributes(XSLTElementProcessor.java:267)[:] 
    at org.apache.xalan.processor.ProcessorLRE.startElement(ProcessorLRE.java:283)[:] 
    at org.apache.xalan.processor.StylesheetHandler.startElement(StylesheetHandler.java:623)[:] 
    at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)[:] 
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)[:] 
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)[:] 
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)[:] 
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)[:] 
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)[:] 
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)[:] 
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)[:] 
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)[:] 
    at org.apache.xalan.processor.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:917)[:] 
    at org.apache.camel.builder.xml.XsltBuilder.setTransformerSource(XsltBuilder.java:360) 
    at org.apache.camel.component.xslt.XsltEndpoint.loadResource(XsltEndpoint.java:342) 
    at org.apache.camel.component.xslt.XsltEndpoint.doStart(XsltEndpoint.java:396) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) 
    at org.apache.camel.impl.DefaultCamelContext.startService(DefaultCamelContext.java:2869) 
    at org.apache.camel.impl.DefaultCamelContext.doAddService(DefaultCamelContext.java:1097) 
    at org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext.java:1058) 
    at org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext.java:1054) 
    at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:574) 
    at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:79) 
    at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:200) 
    at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:107) 
    at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:113) 
    at org.apache.camel.model.SendDefinition.resolveEndpoint(SendDefinition.java:62) 
    at org.apache.camel.model.SendDefinition.createProcessor(SendDefinition.java:56) 
    at org.apache.camel.model.ProcessorDefinition.makeProcessorImpl(ProcessorDefinition.java:533) 
    at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:494) 
    at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:219) 
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1025) 
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:185) 
    at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:841) 
    at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:2895) 
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:2618) 
    at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:167) 
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2467) 
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2463) 
    at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2486) 
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2463) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) 
    at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2432) 
    at org.apache.camel.blueprint.BlueprintCamelContext.start(BlueprintCamelContext.java:180) 
    at org.apache.camel.blueprint.BlueprintCamelContext.maybeStart(BlueprintCamelContext.java:212) 
    at org.apache.camel.blueprint.BlueprintCamelContext.serviceChanged(BlueprintCamelContext.java:150) 
    at org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:943) 
    at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:794) 
    at org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:544) 
    at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4445) 
    at org.apache.felix.framework.Felix.registerService(Felix.java:3431) 
    at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346) 
    at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:353) 
    at org.apache.camel.blueprint.BlueprintCamelContext.init(BlueprintCamelContext.java:100) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_101] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)[:1.8.0_101] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)[:1.8.0_101] 
    at java.lang.reflect.Method.invoke(Unknown Source)[:1.8.0_101] 
    at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:299) 
    at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:956) 
    at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:712) 
    at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:824) 
    at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787) 
    at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79) 
    at java.util.concurrent.FutureTask.run(Unknown Source)[:1.8.0_101] 
    at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88) 
    at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:247) 
    at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:183) 
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:682) 
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:377) 
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:269) 
    at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:294) 
    at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:263) 
    at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:253) 
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)[17:org.apache.aries.util:1.1.0] 
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)[17:org.apache.aries.util:1.1.0] 
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)[17:org.apache.aries.util:1.1.0] 
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)[17:org.apache.aries.util:1.1.0] 
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422) 
    at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1127) 
    at org.apache.felix.framework.util.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:696) 
    at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:484) 
    at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4429) 
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2100) 
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:976) 
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:963) 
    at org.apache.karaf.shell.osgi.RestartBundle.doExecute(RestartBundle.java:45) 
    at org.apache.karaf.shell.osgi.BundlesCommand.doExecute(BundlesCommand.java:37) 
    at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:38) 
    at org.apache.felix.gogo.commands.basic.AbstractCommand.execute(AbstractCommand.java:35) 
    at sun.reflect.GeneratedMethodAccessor169.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)[:1.8.0_101] 
    at java.lang.reflect.Method.invoke(Unknown Source)[:1.8.0_101] 
    at org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54)[19:org.apache.aries.proxy.impl:1.0.4] 
    at org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119)[19:org.apache.aries.proxy.impl:1.0.4] 
    at org.apache.karaf.shell.console.commands.$BlueprintCommand796348771.execute(Unknown Source)[38:org.apache.karaf.shell.console:2.4.0.redhat-621084] 
    at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)[38:org.apache.karaf.shell.console:2.4.0.redhat-621084] 
    at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:477)[38:org.apache.karaf.shell.console:2.4.0.redhat-621084] 
    at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:403)[38:org.apache.karaf.shell.console:2.4.0.redhat-621084] 
    at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)[38:org.apache.karaf.shell.console:2.4.0.redhat-621084] 
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)[38:org.apache.karaf.shell.console:2.4.0.redhat-621084] 
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)[38:org.apache.karaf.shell.console:2.4.0.redhat-621084] 
    at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:92)[38:org.apache.karaf.shell.console:2.4.0.redhat-621084] 
    at org.apache.karaf.shell.console.jline.Console.run(Console.java:197)[38:org.apache.karaf.shell.console:2.4.0.redhat-621084] 
    at org.apache.karaf.shell.console.jline.DelayedStarted.run(DelayedStarted.java:79)[38:org.apache.karaf.shell.console:2.4.0.redhat-621084] 

을 지금과 같은?

+0

게시 한 스 니펫이 올바른 형식이 아닙니다 (끝에있는 닫는 태그는 ''이어야합니다). 빈 루트 요소를 얻는 것에 관해서는, 특정 템플릿을 사용하지 않고'xsl : apply-templates'를하는 것 이외에'for-each-group'에서 아무것도 출력하지 않으므로 내장 템플릿을 사용합니다. 성취하고자하는 결과를 보여 주면 도움이 될 것입니다. –

+1

http://xsltransform.net/ncntCRS/1에서'for-each-group' 내부에서 그룹화하고 정렬하고 출력을 생성하는 예제를 볼 수 있습니다. –

+0

죄송합니다. XML은 사실상의 문서가 아니지만 간결하게하기 위해 축소 된 버전입니다. 실제 파일에는 종료 태그가 없습니다. 방금 전에 발견 한 stacktrace로 내 질문을 업데이트했습니다. 아마도 도움이 될 것입니다. – noMad17

답변

0

설명하는 증상은 경로 표현 otherElem이 아무 것도 선택하지 않는다는 것을 나타냅니다.

아무 것도 선택하지 않으면 컨텍스트 노드가 루트 노드 "/"로 하나의 요소 자식 만 가질 수 있기 때문에 아무것도 찾을 수 없으므로 여기서 찾을 수없는 이상한 경로 표현입니다. 노드 집합에 하나의 요소 만 있으면 그룹화하는 것이 무의미합니다.

원본 문서와 원하는 출력을 표시하면 잘못된 곳을 더 잘 볼 수 있습니다.

나중에

이제 소스 문서와 스타일 시트를 제공하고 있습니다.

<?xml version="1.0" encoding="UTF-8"?><myElem> 

      Order490 

     2016-08-10T15:42:34 

      *** 
      *** 
     ... 

      Order489 

     2016-08-10T15:39:16 

      *** 
      *** 
     ... </myElem> 

매우 유용 보이지 않지만, 확실히 당신이 주장은 "빈 루트 요소"아니다 : 소스 문서 (최종 종료 태그가 잘못) 수리 후, 변환은 출력을 생성합니다.

+0

내 질문을 업데이트하여 내 문제를 파악하는 데 도움이되기를 바랍니다. – noMad17

+0

나는 번들을 시작할 때 알아 차린 stacktrace로 나의 질문을 다시 업데이트했다. – noMad17

+0

이전에 스택 추적을 게시하지 않았다고 부끄러워했습니다. Saxon이 아니라 Xalan을 사용하고있는 것으로 나타납니다. –