Как исправить нераспознанное поле "schemaLocation" при демаршаллинге файла XML - PullRequest
0 голосов
/ 14 мая 2019

Я сталкиваюсь с этой ошибкой при десериализации сообщения XML:

Нераспознанное поле "schemaLocation" (класс com.example.RefreshTokenType), не помеченное как игнорируемое (4 известных свойства: "author_party", "аудитория", "meta", "client_id"]).

<p:RefreshToken authorized_party="" client_id="15d8b31f4823aeaf21d3ba6ee87a4557"
    xmlns:p="http://example.com/xsd/oauth/v2/oauth-spec.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://example.com/xsd/oauth/v2/oauth-spec.xsd oauth-v2-spec.xsd ">
    <p:meta id="meta111" locale="*" name="x" value="x" />
</p:RefreshToken>

Справочная информация: я переключаюсь с org.eclipse.persistence.moxy на FasterXML / Jackson для объединения JSON и XML с помощью Jersey. Все работает нормально, пока я не получу сообщение XML, включая schemaLocation .

Вот мои настройки десериализации:

public static void enableDeserializationSetting(ObjectMapper reader) {
  Set<Class<?>> jaxbClasses = collectJaxbAnnotatedClasses();
  reader.registerModule(new JaxbAnnotationModule());
  reader.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
  reader.registerSubtypes(jaxbClasses);
}

а это фрагмент моего http://example.com/xsd/oauth/v2/oauth-spec.xsd:

    <xs:element name="RefreshToken" type="RefreshTokenType"/>
    <xs:complexType name="RefreshTokenType">
        <xs:sequence>
            <xs:element name="meta" type="MetaDataType" minOccurs="0" maxOccurs="unbounded"></xs:element>
            <xs:element name="audience" type="xs:string" minOccurs="0" maxOccurs="unbounded"></xs:element> <!-- mandated by OpenID Connect spec (aud) -->
        </xs:sequence>
        <xs:attribute name="authorized_party" type="xs:string" use="optional" /> 
        <xs:attribute name="client_id" type="xs:string" use="optional" />
    </xs:complexType>

Может ли кто-нибудь пролить свет?

1 Ответ

0 голосов
/ 14 мая 2019

Вы можете отключить функцию FAIL_ON_UNKNOWN_PROPERTIES в вашем ObjectMapper:

mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

В качестве альтернативы вы можете использовать настройку @JsonIgnoreProperties ignoreUnknown до true:

@JsonIgnoreProperties(ignoreUnknown = true)
public class RefreshTokenType {
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...