Соответствующий подстановочный знак является строгим, но для элемента 'fss: oauth' не найдено никакого объявления - PullRequest
3 голосов
/ 03 января 2012

Я пытаюсь создать приложение Java, которое обращается к данным, хранящимся на Database.com, с помощью Java SDK Database.com. Я выполнил шаги, приведенные в руководстве по началу работы с qucik @ http://forcedotcom.github.com/java-sdk/quick-start. Когда приложение было развернуто на сервере Tomcat, я получил следующее исключение

SEVERE: Exception sending context initialized event to listener instance of class     org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.parsing.BeanDefinitionParsingException:    Configuration problem: Failed to import bean definitions from relative location [security-    config.xml]
Offending resource: ServletContext resource [/WEB-INF/spring/servlet-context.xml];   nested exception is   org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:   Line 15 in XML   document from ServletContext resource [/WEB-INF/spring/security-config.xml] is invalid;   nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching   wildcard is strict, but no declaration can be found for element 'fss:oauth'.
    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
at 

Вот код security-config.xml .

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:fss="http://www.salesforce.com/schema/springsecurity"
xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.salesforce.com/schema/springsecurity
        http://media.developerforce.com/schema/force-springsecurity-1.2.xsd">

<!-- SFDC OAuth security config -->
<fss:oauth logout-from-force-dot-com="true">
    <fss:connectionName name="forceDatabase"/>
</fss:oauth>


<!-- Configure Spring Security -->
<!-- use-expressions and hasRole only needed if jsp tags are used. 
    If not using jsp tags you can omit the use-expressions property and set access="ROLE_USER" on the intercept-url tags -->
<security:http entry-point-ref="authenticationProcessingFilterEntryPoint" use-expressions="true">

    <security:anonymous />

    <!--  Uncomment this section to enable security -->

    <!-- 
    <security:intercept-url pattern="/**" access="isAuthenticated()" />
     -->

    <!-- sets this as the authentication filter over the default -->
    <security:custom-filter position="FORM_LOGIN_FILTER" ref="authenticationFilter"/>
    <security:custom-filter position="LOGOUT_FILTER" ref="logoutFilter"/>
</security:http>

Я вижу, что элемент oauth доступен на xsd http://media.developerforce.com/schema/force-springsecurity-1.2.xsd. Я пытался изменить его на разные версии xsd. Но я не был успешным.

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 7 ]

5 голосов
/ 19 июля 2012

Я не уверен, поможет ли это, но у меня возникла похожая проблема с тегом:.

Это был мой XML:

 <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws="http://cxf.apache.org/jaxws" 
    xmlns:context="http://www.springframework.org/schema/context"   
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

<jaxws:endpoint id="HelloWorldService" implementor="com.client.webservices.ratecard.StandardHelloWorldService" address="/HelloWorldService" />          

Я пробовал все безрезультатно, пока не обнаружил, что каким-то образом прокси-сервер Eclipse был настроен на прямой, и я был за прокси. Тем не менее, я смог получить первый набор определений XSD с сайта Apache (http://cxf.apache.org/jaxws), тем не менее, внутри него вы можете увидеть, что они импортируют еще пару XSD, и в этот момент перенаправление не удавалось, и поэтому я получал очень странные ошибки, такие как это.

Затем я установил прокси Eclipse как Native в настройках, и ошибка волшебным образом исчезла.

Надеюсь, это сработает и в вашем случае.

1 голос
/ 03 января 2012

Это обычно означает, что ваш classpath не настроен правильно, это не проблема xsd.Чтобы проверить (если вы используете Eclipse), вы можете щелкнуть правой кнопкой мыши документ и нажать «подтвердить».Если xsd проверяется с помощью Eclipse, вам не нужно беспокоиться об этой части.

Я считаю, что Spring находит XSD и проверяет его, но затем, когда он встречает тег fss: oauth, он пытается найтиJava-класс, который зарегистрирован для реализации поведения для этого тега и дает сбой.Вы уверены, что на вашем пути к классам есть банки Salesforce?

0 голосов
/ 18 июня 2015

У меня была проблема, аналогичная этой, проходившая учебник по интеграции для SFDC. В поисках решения проблемы я обнаружил эту проблему в репозитории force.com github.

По словам пользователя Github todc

Проблема, я полагаю, связана с URL-адресом media.developerforce.com, а не с адресом salesforce.com. Учитывая возраст репо и отсутствие недавней активности, я предполагаю, что XSD-файлы больше не будут доступны.

Мне удалось найти заархивированные версии файла XSD по адресу:

http://grepcode.com/file/repo1.maven.org/maven2/com.force.sdk/force-springsecurity/22.0.8-BETA/com/force/sdk/springsecurity/config/force-springsecurity-1.2.xsd?av=f

Вы можете упаковать этот файл в свое приложение и использовать вместо него локальную копию, например,

<beans xmlns="http://www.springframework.org/schema/beans"
   xsi:schemaLocation="http://www.salesforce.com/schema/springsecurity
                       classpath:force-springsecurity-1.2.xsd">
</beans>

Возможно, есть лучший способ, но это то, что я смог заставить работать. Удачи!

Github пользователь iandrosov заявил

Теперь я размещаю этот «устаревший» файл fiorsce-springsecurity-1.2.xsd на Heroku, чтобы предоставить доступ к некоторым приложениям. Разделяю мой общедоступный URL здесь, чтобы он мог помочь другим. http://force -spring.herokuapp.com / сила-springsecurity-1.2.xsd

Я решил эту проблему с помощью размещенного в iandrosov файла xsd, заменив оригинальный

http://media.developerforce.com/schema/force-springsecurity-1.3.xsd

со своим хостом xsd

http://force-spring.herokuapp.com/force-springsecurity-1.2.xsd

Я сделал это просто потому, что я делаю учебник. Для всех, кто сталкивается с этой проблемой, вероятно, лучше сделать так, как предлагает пользователь Github todc и

упакуйте файл в ваше приложение и вместо этого обратитесь к локальной копии.

0 голосов
/ 08 января 2015

У меня была такая же проблема, и я заметил, что приложение пыталось получить файл xsd из Интернета вместо использования файла jar.Проблема возникла из-за несоответствия в определении местоположения xsd между файлом spring.schemas и местоположением, указанным в файле applicationContext.xml.Изменение URL-адреса с http://media.developerforce.com/schema/force-springsecurity-1.3.xsd на http://www.salesforce.com/schema/springsecurity/force-springsecurity-1.3.xsd в файле applicationContext.xml решило мою проблему.

0 голосов
/ 28 февраля 2013

Проблема заключается в том, что элемент fss:oauth должен быть определен в схеме (файл xsd), указанной в www.salesforce.com / schema / springsecurity , как определено в объявлении xmlns:fss="http://www.salesforce.com/schema/springsecurity" вначало страницы.

Однако файл xsd , который должен быть в этом URL, просто отсутствует.Я думаю, Salesforce перенес это.Если вы перейдете на www.salesforce.com / schema / springsecurity , вы увидите, что вы получите ошибку 404.

0 голосов
/ 18 декабря 2012

Следуя совету Аравинда У меня просто была эта зависимость от моего ПОМ.

<dependency>
    <groupId>org.kubek2k</groupId>
    <artifactId>springockito</artifactId>
 </dependency>

На самом деле вам просто нужно поместить mockito.xsd на вашем пути.

0 голосов
/ 03 января 2012

Я замечаю во включенной схеме force-springsecurity-1.2.xsd, префикс beans не определен. Что если вы измените

<beans xmlns="http://www.springframework.org/schema/beans"

до

<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"

(и последняя строка тоже)?

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