Сообщение
  • Пожалуйста, прежде пройдите авторизацию

Подписание блока в XML
(1 чел.) (1) гость
  • Страница:
  • 1
  • 2

ТЕМА: Подписание блока в XML

Re: Подписание блока в XML 11 мес., 1 нед. назад #4494

  • worker
  • Новый участник
  • Постов: 10
  • Репутация: 0
Rustem2016 написал:
Я привел свой пример, он сработал в NCALayer - <SOAP-ENV:Envelope xmlns:SOAP-ENV=" schemas.xmlsoap.org/soap/envelope/" xmlns:cab=" www.test.kz"><SOAP-ENV:Header/><SOAP-ENV:Body id="Body"><cab:Data><ROOT><getData><Reference>OTcxZWY1MTlhY2NjMDM0ZGI2MDBjZGM4ZDIxYzJjZTkyOTBjMGZhMGRkNDMxMzE0NzNiM2Y4NDM1ZmQwMDcwZg==</Reference></getData></ROOT></cab:Data></SOAP-ENV:Body></SOAP-ENV:Envelope>

Возможно имеет смысл пересмотреть конструкцию Вашего XML?


Попробовал ваш документ поведение тоже самое.
А вы используете боевой релиз или у себя в дебаге?

Вот все варианты, что я испробовал:
1. Если "args": [storageName, keyType, xmlToSign, "//*[@Id='Body']", ""] и в XML <SOAP-ENV:Body Id="Body"> выходит ошибка: "javax.xml.xpath.XPathExpressionException: javax.xml.transform.TransformerException: Empty expression!"
2. Если "args": [storageName, keyType, xmlToSign, "//*[@id='Body']", ""] и в XML <SOAP-ENV:Body id="Body"> выходит ошибка: "Указанный для подписи элемент не содержит атрибут 'Id'"
3. Если "args": [storageName, keyType, xmlToSign, "//*[@id='Body']", ""] и в XML <SOAP-ENV:Body Id="Body"> выходит ошибка "Указанный для подписи элемент //*[@Id='Body'] не найден"

Какие еще есть варианты?

Re: Подписание блока в XML 11 мес., 1 нед. назад #4495

  • Rustem2016
  • Давно я тут
  • Постов: 93
  • Репутация: 5
worker написал:
1. Если "args": [storageName, keyType, xmlToSign, "//*[@Id='Body']", ""] и в XML <SOAP-ENV:Body Id="Body"> выходит ошибка: "javax.xml.xpath.XPathExpressionException: javax.xml.transform.TransformerException: Empty expression!"


Здесь скорее всего не указано место где должна быть сама подпись - "args": [storageName, keyType, xmlToSign, "//*[@Id='Body']", "//*[local-name()='Header']"]

worker написал:
2. Если "args": [storageName, keyType, xmlToSign, "//*[@id='Body']", ""] и в XML <SOAP-ENV:Body id="Body"> выходит ошибка: "Указанный для подписи элемент не содержит атрибут 'Id'"


Здесь атрибут id указан с маленькой буквы, нужно с большой Id

worker написал:
3. Если "args": [storageName, keyType, xmlToSign, "//*[@id='Body']", ""] и в XML <SOAP-ENV:Body Id="Body"> выходит ошибка "Указанный для подписи элемент //*[@Id='Body'] не найден"


Такой ошибки не возникло... скорее всего все дело в отсутствии описания namespace

Re: Подписание блока в XML 11 мес., 1 нед. назад #4498

  • worker
  • Новый участник
  • Постов: 10
  • Репутация: 0
if(signatureParentElementXPath != null) {
Element signatureParentElement = (Element)xPath1.evaluate(signatureParentElementXPath, document, XPathConstants.NODE);
signatureParentElement.appendChild(xmlSignature.getElement());
} else {
document.getFirstChild().appendChild(xmlSignature.getElement());
}
Это ошибка NCALayer-а.
На этой строке выходит ошибка.
Если я указываю параметр для блока размещения подписи, то все подписывает. Но при отсутствии параметра выдает ошибку.
Изменено: 11 мес., 1 нед. назад от worker.

Re: Подписание блока в XML 11 мес., 1 нед. назад #4499

  • Rustem2016
  • Давно я тут
  • Постов: 93
  • Репутация: 5
Может все же проверять наличие искомого объекта?

Можно и так:
XMLSignature sig = new XMLSignature(document, "", "http://www.w3.org/2001/04/xmldsig-more#......");
if (document.getFirstChild() != null) {
	document.getElementsByTagName("<XPATH до тега Signature с учетом namespace>").item(0).appendChild(sig.getElement());
	..... 
}

Re: Подписание блока в XML 11 мес., 1 нед. назад #4502

  • worker
  • Новый участник
  • Постов: 10
  • Репутация: 0
Rustem2016 написал:
Может все же проверять наличие искомого объекта?

Можно и так:
XMLSignature sig = new XMLSignature(document, "", "http://www.w3.org/2001/04/xmldsig-more#......");
if (document.getFirstChild() != null) {
	document.getElementsByTagName("<XPATH до тега Signature с учетом namespace>").item(0).appendChild(sig.getElement());
	..... 
}


Думаю нужно просто при отсутствии этого параметра указывать место подписи, корневой элемент. Как он действует при отсутствующих параметрах XPath.
Изменено: 11 мес., 1 нед. назад от worker.

Re: Подписание блока в XML 3 мес., 2 нед. назад #4987

  • Rustem2016
  • Давно я тут
  • Постов: 93
  • Репутация: 5
Добрый день!

Возник вопрос - необходимо подписать блок XML через вызов с параметрами
var signXml = {
"module": "kz.gov.pki.knca.commonUtils",
"method": "signXml",
"args": [storageName, keyType, xmlToSign, "//*[local-name()='Document']", "//*[local-name()='Header']"]
};
Однако, структурой описанной в XSD не предусмотрено наличие атрибута Id для подписываемого элемента XML (Document) и NCALayer выдает сообщение: "Указанный для подписи элемент не содержит атрибут 'Id'"

Как можно подписать элемент Document без указания в нем каких-либо аттрибутов?
  • Страница:
  • 1
  • 2
FaLang translation system by Faboba