2016-06-10 15 views
2

Dies ist mein Code für die Unterzeichnung eines XMLInhalt ist nicht in Prolog Ausgabe erlaubt

public String signXML(String xmlDocument, boolean includeKeyInfo) { 
    Security.addProvider(new BouncyCastleProvider()); 
    try { 
     // Parse the input XML 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     dbf.setNamespaceAware(true); 
     Document inputDocument = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(xmlDocument))); 

     // Sign the input XML's DOM document 
     Document signedDocument = sign(inputDocument, includeKeyInfo); 

     // Convert the signedDocument to XML String 
     StringWriter stringWriter = new StringWriter(); 
     TransformerFactory tf = TransformerFactory.newInstance(); 
     Transformer trans = tf.newTransformer(); 
     trans.transform(new DOMSource(signedDocument), new StreamResult(stringWriter)); 

     return stringWriter.getBuffer().toString(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     throw new RuntimeException("Error while digitally signing the XML document", e); 
    } 
} 

ich bin mit hier

public static void main(String [] ags) 
{ 
    //SignGenerator signgenerator=new SignGenerator(); 
    //signgenerator.generateXMLDigitalSignature("C:\\Users\\admin\\workspace\\Esign_Request\\Esign.xml", "C:\\Users\\admin\\workspace\\Esign_Request\\jaxb-emp.xml", "C:\\Users\\admin\\Downloads\\simple.p12", "C:\\Users\\admin\\Downloads\\uidai_auth_prod.cer"); 
    char[] a={'p','u','b','l','i','c'}; 
    DigitalSigner ds=new DigitalSigner("C:\\Users\\admin\\Downloads\\simple.p12",a,"public"); 
    String s=ds.signXML("C:\\Users\\admin\\workspace\\Esign_Request\\Esign.xml",true); 
    System.out.println(s); 
} 

Aber seine zeigen Fehler

Fatal Error] :1:1: Content is not allowed in prolog. 

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. 
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) 

Seine Vorführung Fehler in

Document inputDocument = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(xmlDocument))); 

Ich habe alle Antworten zu diesem Thema gelesen und sie alle zeigen auf das <?xml > Tag, etwas vor sich zu haben, aber ... XML, das ich überlasse, beginnt mit <?xml Tag. Keine Whitespaces Also, warum zeigt es Fehler?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Esign ts="2016-06-09T16:44:44" txn="78e65b0e-a20c-4fe2-b3cc-746a8e0c4670" esignClass="1" aspId="KNTR-900" gatewayPin="" preferredCa="" sc="Y" ver="1.0"> 
    <Input>658c26712e1d4591253833407dc2cd81b8b686370d38b4c65c2ea6bdf54e5dd4</Input> 
    <Aadhaar>UEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVZWUkdMVGdpSUhOMFlXNWtZV3h2Ym1VOUlubGxjeUkvUGp4QmRYUm9JSFZwWkQwaU9UazVPVGs1T1Rrd01ERTVJaUIwYVdROUluQjFZbXhwWXlJZ2RtVnlQU0l4TGpZaUlIUjRiajBpTUdZMVpXTmlNMk10WlRVMU15MDBaalF6TFdGaU5tVXRPVEEyTmpSa01qUXlORGRsSWlCNGJXeHVjejBpSUdoMGRIQTZMeTkzZDNjdWRXbGtZV2t1WjI5MkxtbHVMMkYxZEdobGJuUnBZMkYwYVc5dUwzVnBaQzFoZFhSb0xYSmxjWFZsYzNRdk1TNHdJQ0krUEUxbGRHRWdkV1JqUFNJaUlIQnBjRDBpSWlCbVpHTTlJazVCSWlCcFpHTTlJazVCSWlCc2IzUTlJbEFpSUd4dmRqMGlNVEV3TURBeUlpOCtQRk5yWlhrZ1kyazlJakl3TVRjd01qSTNJajVVUkhaMVkwRmtaelpOUTNSUlZqRlpkbEE1VEZkNGNrdEhlbEJKVTNoaFdHVlNZWEJyZWxwMk1sSklRVWQ2YVZkcVlYbDZRblpsYUVWYWRrRldWM2R1VVZwWFNERmFlalV3U3pGbVZEY3lUbFZ1WlhWSFlWQTNZVTFJZFRZMWIwNHdSVmhEZEdneWEyNUxVR2dyUVNzeFdGZzFObXRzUjJZeGFrTlFLMnhGUlhwR1VrSmpaRlJ2YVd4SVZYZDRUMmRYV0Zka2QwZHBablJMZFdaclVVUkpSbFJUTHk5aVZrTkpjRmRoYlZab1IyZHZWV2xDUzNOUloxSjJTRFU1SzJWNVpuWnFWVnBNTURCdmVtRmtlbE41ZFRseVNrSlVORkZpWXpGcWJHbExVVWxPVjNCRWEzSnFTRWRIYzNJNU9WTkViRVpJTTBOTWJUZFBabGczVVhVMU1FZEJVR2RaU0haR2FVSkdiR0pOZGtWWFUzWXJLMmRPTVdNMVJYTTNWR3d3UVhjeGVuSjVSMU5hY0hKbFUzZHJVemtyVkRWdkszWXJlbXBPYkhSQk1VZDBSbXhpYmtSd1NsaDBibU16VkhGRFMzSlpOV2M5UFR3dlUydGxlVDQ4UkdGMFlTQjBlWEJsUFNKWUlqNDNXREJZVW5Od1RYQTViMWMwWW5GNGJFMXhZM0Y0T0dvek5IYzBUbGRhTlZWSVprWlRUM2RXTlhocVprRldUbVJIT0hwQ1dFRnhSRTh6WlhoWlQxTjZjMGhJWjJwcVRESkxkSEpCUzBJMVJYUTRORWt5UXpSdk0wWk9PRUZ2U2tGalRWQnlWbUZUTTFSRU5tTkRXbE5IVTNWWU9VUXpTbGR1UW1KVlVVWlJMM2RxYTJ0TFR6aGhTMlJoV1RRM1N6TkVMM2RwUVVkS2RUZ3hhMFV6YkRScmFHUklhM0ZDT1ZWbVozQXlNMVZSVGxCQ05YVnRkalpIY21FemJUQjNUell4UkVGTWJDOWlaazlZUlVsTmVDOU9OV2h0UkVOYVRtZ3hhR1JRV1ZORFdFdEJlVGgxWjNkNloxQk5ObVJHTWxGcFF5OTZUMGhKUkVWaGNGaE9UM0J1UjNZeE5rbFlSRVpRUzFsVVJFdzVZM05CTVU5SGIwbHBMMGh5ZGtGb1UxWk5iM2w2Y21wNE9IWXJZbEZEV1ZaM1NXZGxVQzlXVjJ4NFl6TjZkMHhpUlVGaVRIbzVXRzUzYjBZNWEwVldNRlI0VWxGMU1rRTJaRFp6TkdvMU1FRTJVVEp0Vm1wc2RrWm9kV3hJWkZvMFUxQnpOWEZwVHk4dlpYSjBiWGxKVG5kME5uSnRVRmhrV1U0Mk4zZHZVVkZRTjJ3d09DczBUVU5rWlcweU5HMDFiblJZTVRsc2NrZzJOMGxtTTBkMGRVOXFUSGN2TmtsNllqRTBjMU50TlVzNWVraDFhamxuYTB4dVYxUnFXR1JTUldodFZFVm9SakJhVFZOWGRrdFJWV1J2YmpaeGRtcElWelpZTjJnMVIzVkNVVWxrY1VsbmNGVlZVMjgyWVV0VVkzQlNVREEwUm10RldHZDJhbEpyV0c0NFFYSTFkWHBUWTNCbGRXZExWMjE1YkV4RVNEUkhPVE5CYVVaalJUUndabXhRZG10TFNDc3hSVTlZTkVoR01uazVVbnBtU1dWeFpuUXlhamxQWVhkMWFFUXhjekVyUjNoMFFWRXdabXBGYVhZNGQyVjJOMXBYVmxKcWMwbE5aMHBwYmxGVVNIZHJlRVJ2U1VoeGVITmlObE5qWkVRMWRYYzJkV2cyYUcxRFVrcDRVRTFIZW1aVVpFNVhaMGt5UTBOYWFXZG1VRFpFY1ZVMGRuRjZTSFZvYUZaM2JXNTVPSEppU3paWWRFSm9aV3haVWpoS2RqRnNNMlJYTjBaSGNUYzBiemxWYVhjOVBUd3ZSR0YwWVQ0OFNHMWhZejVrTW1NelpXMWFNazlHWnpCVVUzUlBXVlZPTW1Gc1NtdFVXSEJ5VlRCbmNsWnRjRFZqTURBMVdWVkdhRlo2WkRCU2JHUkNaVlZLUmxkSFdrNVRWVW93V1cweGRHRnNRalJOZWtreVkxVmtNbFZYV21oalFUMDlQQzlJYldGalBqd3ZRWFYwYUQ0PQ==</Aadhaar> 
</Esign> 

Real XML

+0

ich erhaben verwende. Es zeigte nichts – Mudit

+1

Bitte überprüfen Sie Ihre Datei und sagen Sie uns, welches Byte das erste '<' entspricht (und raten Sie nicht, wenn Sie im Zweifelsfall einen Hexeditor ausprobieren). Es ist _nicht_ das erste Byte, vor dem Sie etwas haben, was, wenn Sie es nicht in einem Texteditor sehen, eine Stückliste sein könnte, genau wie RC angezeigt. – Thomas

+0

wie kann ich Stückliste entfernen und identifizieren. – Mudit

Antwort

0

Eine Möglichkeit wäre, dass es eine BOM am Anfang der Datei ist, versuchen einige erweiterte Editor aktuelle Codierung zu überprüfen und die xml in UTF-8 ohne BOM speichern.

Sublime Text verwenden, in dem Dateimenü, verwenden Sie mit Codierung speichern und "UTF-8" wählen:

screenshot

Dies sollte Ihre BOM

0

entfernen habe ich einige Änderungen und seine jetzt Arbeiten. Aber immer noch nicht gefunden, warum es Fehler in der vorherigen Version zeigte.

vorherigen Version-:

Document inputDocument = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(xmlDocument))); 

Neue Version -:

Document inputDocument = dbf.newDocumentBuilder().parse(new InputSource(new File(XmlDocument)); 

I Changed String (XmlDocument) to File (XmlDocument)