2012-12-14 2 views
0

Libarary xades4j. код следующим образом:namespace и xpath

static { 
      try { 
       DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
       dbf.setNamespaceAware(true); 
       db = dbf.newDocumentBuilder(); 
      } catch (ParserConfigurationException ex) { 
       // ... ... 
      } 
     } 


Document doc = db.getNewDocument();   
DataObjectDesc obj1 = new DataObjectReference(
"file:///E:/doctosign/forxpath/ori_message.xml") 
.withCommitmentType(getCommitmentType()) 
.withTransform(new  CanonicalXMLWithoutComments()) 
.withTransform(XPath2Filter.intersect(getxPath())) 
.withDataObjectTimeStamp(); 

XadesSigner xadesSigner = (XadesSigner) new XadesTSigningProfile(keyProvider) 
.withTimeStampTokenProvider(TestTimeStampTokenProvider.class)  
.withAlgorithmsProviderEx(ExclusiveC14nForTimeStampsAlgorithmsProvider.class) 
.newSigner(); 

xadesSigner.sign(new SignedDataObjects(obj1), doc); 

, если нет каких-либо имен определенных в документе XML и getxPath() обратный путь любит

"/ Документ/компонент",

оба генерация и проверка подписи работают хорошо.

, а затем, я добавить пространство имен в файл XML:

<Document xmlns="ff:kk"> 

и изменить возвращаемое значение getxPath() в

«/ далее: кк: Документ/ff: kk: компонент «

Исключения выбрасываются при генерации сигнатуры

префикс должен разрешаться в пространстве имен: ФФ: кк

кажется, что я должен добавить что-то вроде xpath.setNamespaceContext (javax.xml.namespace.NamespaceContext) в код во время генерации подписи.

но где я могу это сделать.

благодаря

стека исключений ниже

xades4j.production.PropertyDataGenerationException: Property data generation failed for IndividualDataObjectsTimeStamp: cannot create time stamp input 
    at xades4j.production.DataGenBaseTimeStamp.generatePropertyData(DataGenBaseTimeStamp.java:71) 
    at xades4j.production.PropertiesDataObjectsGeneratorImpl.doGenPropsData(PropertiesDataObjectsGeneratorImpl.java:86) 
    at xades4j.production.PropertiesDataObjectsGeneratorImpl.genPropsData(PropertiesDataObjectsGeneratorImpl.java:72) 
    at xades4j.production.PropertiesDataObjectsGeneratorImpl.generateSignedPropertiesData(PropertiesDataObjectsGeneratorImpl.java:55) 
    at xades4j.production.SignerBES.sign(SignerBES.java:220) 
    at xades4j.production.SignerBES.sign(SignerBES.java:122) 
    at jp.okayamauniv.medinformatics.xmlsign.xades.XAdES_TEnvelopedXPathSignerImpl.sign(XAdES_TEnvelopedXPathSignerImpl.java:59) 
    at jp.okayamauniv.medinformatics.xmlsign.xades.XAdESSigner.generateSignature(XAdESSigner.java:83) 
    at jp.okayamauniv.medinformatics.xmlsign.xades.IXAdES_BESXPathSignWorkFlow.sign(IXAdES_BESXPathSignWorkFlow.java:37) 
    at jp.okayamauniv.medinformatics.xmlsign.xades.IXAdESSignWorkFlow.signWorkflow(IXAdESSignWorkFlow.java:71) 
    at xsignui.partinpp2.MainWindowPart$9.widgetSelected(MainWindowPart.java:723) 
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1021) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:915) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86) 
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:150) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414) 
Caused by: xades4j.utils.CannotAddDataToDigestInputException: Prefix must resolve to a namespace: ff:kk 
    at xades4j.utils.TimeStampDigestInputImpl.addReference(TimeStampDigestInputImpl.java:68) 
    at xades4j.production.DataGenIndivDataObjsTimeStamp.addPropSpecificTimeStampInput(DataGenIndivDataObjsTimeStamp.java:64) 
    at xades4j.production.DataGenIndivDataObjsTimeStamp.addPropSpecificTimeStampInput(DataGenIndivDataObjsTimeStamp.java:41) 
    at xades4j.production.DataGenBaseTimeStamp.generatePropertyData(DataGenBaseTimeStamp.java:58) 
    ... 33 more 
Caused by: org.apache.xml.security.signature.XMLSignatureException: Prefix must resolve to a namespace: ff:kk 
Original Exception was org.apache.xml.security.transforms.TransformationException: Prefix must resolve to a namespace: ff:kk 
Original Exception was org.apache.xpath.domapi.XPathStylesheetDOM3Exception: Prefix must resolve to a namespace: ff:kk 
    at org.apache.xml.security.signature.Reference.getContentsAfterTransformation(Reference.java:464) 
    at org.apache.xml.security.signature.Reference.getContentsAfterTransformation(Reference.java:480) 
    at xades4j.utils.TimeStampDigestInputImpl.addReference(TimeStampDigestInputImpl.java:63) 
    ... 36 more 
Caused by: org.apache.xml.security.transforms.TransformationException: Prefix must resolve to a namespace: ff:kk 
Original Exception was org.apache.xpath.domapi.XPathStylesheetDOM3Exception: Prefix must resolve to a namespace: ff:kk 
    at org.apache.xml.security.transforms.implementations.TransformXPath2Filter.enginePerformTransform(TransformXPath2Filter.java:138) 
    at org.apache.xml.security.transforms.Transform.performTransform(Transform.java:304) 
    at org.apache.xml.security.transforms.Transforms.performTransforms(Transforms.java:277) 
    at org.apache.xml.security.signature.Reference.getContentsAfterTransformation(Reference.java:448) 
    ... 38 more 
Caused by: org.apache.xpath.domapi.XPathStylesheetDOM3Exception: Prefix must resolve to a namespace: ff:kk 
    at org.apache.xpath.compiler.XPathParser.errorForDOM3(XPathParser.java:655) 
    at org.apache.xpath.compiler.Lexer.mapNSTokens(Lexer.java:647) 
    at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:365) 
    at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:98) 
    at org.apache.xpath.compiler.XPathParser.initXPath(XPathParser.java:112) 
    at org.apache.xpath.XPath.<init>(XPath.java:178) 
    at org.apache.xml.security.utils.XalanXPathAPI.createXPath(XalanXPathAPI.java:159) 
    at org.apache.xml.security.utils.XalanXPathAPI.eval(XalanXPathAPI.java:134) 
    at org.apache.xml.security.utils.XalanXPathAPI.selectNodeList(XalanXPathAPI.java:82) 
    at org.apache.xml.security.transforms.implementations.TransformXPath2Filter.enginePerformTransform(TransformXPath2Filter.java:117) 
    ... 41 more 
jp.okayamauniv.medinformatics.xmlsign.xades.ErrorInGenerateSignatureException: Property data generation failed for IndividualDataObjectsTimeStamp: cannot create time stamp input 
    at jp.okayamauniv.medinformatics.xmlsign.xades.XAdES_TEnvelopedXPathSignerImpl.sign(XAdES_TEnvelopedXPathSignerImpl.java:69) 
    at jp.okayamauniv.medinformatics.xmlsign.xades.XAdESSigner.generateSignature(XAdESSigner.java:83) 
    at jp.okayamauniv.medinformatics.xmlsign.xades.IXAdES_BESXPathSignWorkFlow.sign(IXAdES_BESXPathSignWorkFlow.java:37) 
    at jp.okayamauniv.medinformatics.xmlsign.xades.IXAdESSignWorkFlow.signWorkflow(IXAdESSignWorkFlow.java:71) 
    at xsignui.partinpp2.MainWindowPart$9.widgetSelected(MainWindowPart.java:723) 
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1021) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:915) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86) 
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:150) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414) 
Caused by: xades4j.production.PropertyDataGenerationException: Property data generation failed for IndividualDataObjectsTimeStamp: cannot create time stamp input 
    at xades4j.production.DataGenBaseTimeStamp.generatePropertyData(DataGenBaseTimeStamp.java:71) 
    at xades4j.production.PropertiesDataObjectsGeneratorImpl.doGenPropsData(PropertiesDataObjectsGeneratorImpl.java:86) 
    at xades4j.production.PropertiesDataObjectsGeneratorImpl.genPropsData(PropertiesDataObjectsGeneratorImpl.java:72) 
    at xades4j.production.PropertiesDataObjectsGeneratorImpl.generateSignedPropertiesData(PropertiesDataObjectsGeneratorImpl.java:55) 
    at xades4j.production.SignerBES.sign(SignerBES.java:220) 
    at xades4j.production.SignerBES.sign(SignerBES.java:122) 
    at jp.okayamauniv.medinformatics.xmlsign.xades.XAdES_TEnvelopedXPathSignerImpl.sign(XAdES_TEnvelopedXPathSignerImpl.java:59) 
    ... 27 more 
Caused by: xades4j.utils.CannotAddDataToDigestInputException: Prefix must resolve to a namespace: ff:kk 
    at xades4j.utils.TimeStampDigestInputImpl.addReference(TimeStampDigestInputImpl.java:68) 
    at xades4j.production.DataGenIndivDataObjsTimeStamp.addPropSpecificTimeStampInput(DataGenIndivDataObjsTimeStamp.java:64) 
    at xades4j.production.DataGenIndivDataObjsTimeStamp.addPropSpecificTimeStampInput(DataGenIndivDataObjsTimeStamp.java:41) 
    at xades4j.production.DataGenBaseTimeStamp.generatePropertyData(DataGenBaseTimeStamp.java:58) 
    ... 33 more 
Caused by: org.apache.xml.security.signature.XMLSignatureException: Prefix must resolve to a namespace: ff:kk 
Original Exception was org.apache.xml.security.transforms.TransformationException: Prefix must resolve to a namespace: ff:kk 
Original Exception was org.apache.xpath.domapi.XPathStylesheetDOM3Exception: Prefix must resolve to a namespace: ff:kk 
    at org.apache.xml.security.signature.Reference.getContentsAfterTransformation(Reference.java:464) 
    at org.apache.xml.security.signature.Reference.getContentsAfterTransformation(Reference.java:480) 
    at xades4j.utils.TimeStampDigestInputImpl.addReference(TimeStampDigestInputImpl.java:63) 
    ... 36 more 
Caused by: org.apache.xml.security.transforms.TransformationException: Prefix must resolve to a namespace: ff:kk 
Original Exception was org.apache.xpath.domapi.XPathStylesheetDOM3Exception: Prefix must resolve to a namespace: ff:kk 
    at org.apache.xml.security.transforms.implementations.TransformXPath2Filter.enginePerformTransform(TransformXPath2Filter.java:138) 
    at org.apache.xml.security.transforms.Transform.performTransform(Transform.java:304) 
    at org.apache.xml.security.transforms.Transforms.performTransforms(Transforms.java:277) 
    at org.apache.xml.security.signature.Reference.getContentsAfterTransformation(Reference.java:448) 
    ... 38 more 
Caused by: org.apache.xpath.domapi.XPathStylesheetDOM3Exception: Prefix must resolve to a namespace: ff:kk 
    at org.apache.xpath.compiler.XPathParser.errorForDOM3(XPathParser.java:655) 
    at org.apache.xpath.compiler.Lexer.mapNSTokens(Lexer.java:647) 
    at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:365) 
    at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:98) 
    at org.apache.xpath.compiler.XPathParser.initXPath(XPathParser.java:112) 
    at org.apache.xpath.XPath.<init>(XPath.java:178) 
    at org.apache.xml.security.utils.XalanXPathAPI.createXPath(XalanXPathAPI.java:159) 
    at org.apache.xml.security.utils.XalanXPathAPI.eval(XalanXPathAPI.java:134) 
    at org.apache.xml.security.utils.XalanXPathAPI.selectNodeList(XalanXPathAPI.java:82) 
    at org.apache.xml.security.transforms.implementations.TransformXPath2Filter.enginePerformTransform(TransformXPath2Filter.java:117) 
    ... 41 more 

ответ

3

Об объявлении пространства имен вы о том, что пространство имен де умолчанию для этого элемента «и далее: кк», а не префикс. В выражении xpath вы используете его как префикс, который не определен.

Возможно, что-то вроде xmlns:prefix="namespace" на верхнем элементе, а затем /prefix:Document/prefix:component на xpath.

+0

lgoncalves .thanks. Я добавляю [xmlns: prefix = "namespace"] в верхний компонент, но он все еще не работает как экспериментальный. Я собираюсь искать документы о [xpath и namespace], а затем вернуться сюда. –