我正在尝试构建一个Java应用程序,该应用程序使用Database.com Java SDK访问存储在Database.com中的数据。我已经按照qucik start guide @ 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的不同版本。但我没有成功。
请帮我解决此问题。
答案 0 :(得分:5)
我不确定这是否会有所帮助,但我在标签上遇到了类似的问题:。
这是我的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代理设置为直接并且我在代理后面。我仍然可以从Apache站点(http://cxf.apache.org/jaxws)获得第一组XSD定义,但是在其中你可以看到他们正在导入更多的XSD,此时重定向失败了因此我得到了非常奇怪的错误。
然后我在首选项中将Eclipse代理设置为Native,错误神奇地消失了。
我希望这也适用于您的情况。
答案 1 :(得分:1)
这通常意味着您的类路径设置不正确,它不是xsd问题。要验证(如果您使用的是Eclipse),可以右键单击该文档并单击“验证”。如果xsd使用Eclipse验证,那么您不必担心该部分。
我认为发生的是Spring发现XSD并验证但是当它遇到fss:oauth标记时,它会尝试找到一个注册的Java类来实现该标记的行为并失败。您确定在类路径上有Salesforce jar吗?
答案 2 :(得分:0)
我注意到在包含的模式force-springsecurity-1.2.xsd
中,前缀beans
未定义。如果修改
<beans xmlns="http://www.springframework.org/schema/beans"
到
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
(也是最后一行)?
答案 3 :(得分:0)
遵循Aravind的建议我只是依赖于我的POM。
<dependency>
<groupId>org.kubek2k</groupId>
<artifactId>springockito</artifactId>
</dependency>
实际上你只需要将mockito.xsd放在你的路径中。
答案 4 :(得分:0)
问题是元素fss:oauth
应该在www.salesforce.com/schema/springsecurity列出的模式(xsd文件)中定义,如页面顶部的声明xmlns:fss="http://www.salesforce.com/schema/springsecurity"
中所定义。 / p>
然而,应该在该网址中的 xsd 文件就不存在了。我猜Salesforce搬了它。如果您转到www.salesforce.com/schema/springsecurity,则表示您收到404错误。
答案 5 :(得分:0)
我遇到了同样的问题,我发现应用程序试图从互联网上获取xsd文件,而不是使用jar文件。导致该问题的原因是spring.schemas文件与applicationContext.xml文件中指定的位置之间的xsd位置定义不匹配。在applicationContext.xml文件中将网址从http://media.developerforce.com/schema/force-springsecurity-1.3.xsd更改为http://www.salesforce.com/schema/springsecurity/force-springsecurity-1.3.xsd解决了我的问题。
答案 6 :(得分:0)
我有一个类似的问题,通过SFDC的集成教程。在我搜索解决问题的过程中,我在force.com github repo上找到了这个issue。
根据Github用户todc
我认为,问题在于media.developerforce.com网址,而不是salesforce.com网址。鉴于回购时代和最近缺乏活动,我猜测XSD文件不会再次可用。
我能够在以下位置找到XSD文件的存档版本:
您可以将该文件打包到您的应用中,并改为参考本地副本,例如
<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声明
我现在主持这个&#34;已弃用&#34; Heroku上的fiorsce-springsecurity-1.2.xsd可以访问may应用程序。在这里分享我的公共URL,这样可以帮助其他人。 http://force-spring.herokuapp.com/force-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建议和
将文件打包到您的应用程序中,然后参考本地副本。