«Недопустимые шестнадцатеричные символы в шаблоне escape (%)» при выполнении s3.listObjects () - PullRequest
0 голосов
/ 28 января 2019

Я столкнулся с любопытной проблемой.У меня есть веб-приложение на Java, которое использует AWS SDK. Моя локальная установка

  • Последний Docker
  • Контейнер с Centos7 + tomcat9.0.13 + JDK 1.8.0_161

Одно из моих имен ключей объекта - ".Test% Test% & Name.jpg",

Когда я пытаюсь s3.listObject(), я получаю

by: java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "TE" at java.net.URLDecoder.decode(URLDecoder.java:194) ~[na:1.8.0_161] at com.amazonaws.util.SdkHttpUtils.urlDecode(SdkHttpUtils.java:114) ~[aws-java-sdk-core-1.11.283.jar:na]

Однако .... для точно то же самое веб-приложение (та же война) и та же настройка (EC2 centos 7, jdk 1.8.161, tomcat 9.0.13) и с тем же ключом в S3 s3.listObject () не делает через это исключение?

Это определенно что-то хитрое с тем, как JVM загружает библиотеки, но я не могу понять, как я могу проверить, что загружено.

Я хотел бы сравнить, какой XMLparser загружен на мой EC2, и какой анализатор загружен в моей локальной настройке Docker.

Full Stack trace:

Caused by: java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "TE"
    at java.net.URLDecoder.decode(URLDecoder.java:194) ~[na:1.8.0_161]
    at com.amazonaws.util.SdkHttpUtils.urlDecode(SdkHttpUtils.java:114) ~[aws-java-sdk-core-1.11.283.jar:na]
    at com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser.decodeIfSpecified(XmlResponsesSaxParser.java:302) ~[aws-java-sdk-s3-1.11.283.jar:na]
    at com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser.access$200(XmlResponsesSaxParser.java:100) ~[aws-java-sdk-s3-1.11.283.jar:na]
    at com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser$ListBucketHandler.doEndElement(XmlResponsesSaxParser.java:699) ~[aws-java-sdk-s3-1.11.283.jar:na]
    at com.amazonaws.services.s3.model.transform.AbstractHandler.endElement(AbstractHandler.java:52) ~[aws-java-sdk-s3-1.11.283.jar:na]
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609) ~[na:1.8.0_161]
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782) ~[na:1.8.0_161]
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2967) ~[na:1.8.0_161]
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602) ~[na:1.8.0_161]
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112) ~[na:1.8.0_161]
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505) ~[na:1.8.0_161]
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842) ~[na:1.8.0_161]
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771) ~[na:1.8.0_161]
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) ~[na:1.8.0_161]
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) ~[na:1.8.0_161]
    at com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser.parseXmlInputStream(XmlResponsesSaxParser.java:147) ~[aws-java-sdk-s3-1.11.283.jar:na]
    ... 163 common frames omitted

1 Ответ

0 голосов
/ 03 апреля 2019

Как указывает ошибка, это не действительный символ HEX.HEX символы начинаются с '%'.Вам нужно экранировать его до %25, что эквивалентно.

Тогда имя вашего экранированного ключа будет:

".Test%25Test%25&Name.jpg"

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...