这是一个我已经坚持了好几个小时的问题,到现在为止我感到非常绝望.我将我们的应用程序从Spring 2.5/Hiberante 3.3迁移到Spring 3.0.5/Hibernate 3.6.完成以下工作:
在经过不同的小修复和调整后从Eclipse IDE启动时仍然存在的错误如下:
Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/tx]
Run Code Online (Sandbox Code Playgroud)
我查看了其他线程,并意识到当在类路径中找不到特定的lib(在本例中为spring-tx)时会出现这样的问题,但我在Maven依赖项中清楚地看到它.
我做的下一件事是,我为以前的版本构建了WAR,将它部署在Tomcat上,应用程序运行良好!
通过这个我可以得出Eclipse环境配置中缺少某些东西的结论.有趣的是,所有的抱怨都是关于spring-tx, - 当我使用tx命名空间删除单行时
<tx:annotation-driven transaction-manager="transactionManager" />
...应用程序启动正常而没有抱怨其他命名空间(当然,它没有正常工作,但至少没有抱怨期间初始).
关于我的IDE /项目设置的一些摘要:
正式的问题是:在迁移到Spring 3x后,从IDE启动项目会导致此类错误的可能原因是什么(并且作为构建的WAR可以正常部署)?
我不指望直接的答案(除非有人有完全相同的环境和问题),但指导方针,建议会有很大的帮助!
编辑 忘记提及在IDE启动应用程序期间,我有一堆这样的警告:
[WARN] Server class 'javax.persistence.EntityManagerFactory' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/D:/maven/repository/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.0.Final/hibernate-jpa-2.0-api-1.0.0.Final.jar' to the web app classpath for this …Run Code Online (Sandbox Code Playgroud) 我必须构建一个带有Maven/Tycho的Eclipse插件,它与其他第三方有依赖关系.由于Tycho尚不支持嵌入依赖项,因此我将项目拆分为以下两项:
A-thirdparty:带有打包'bundle'的项目,由maven-bundle-plugin构建,具有'Embed-Dependency'指令,并导出插件'A'所需的所有包A:项目包装'eclipse-plugin',使用tycho-maven-plugin,以及Tycho的target-platform-configuration插件,pomDependencies设置为consider.当我单独构建它们时(首先是第三方聚合器,然后是项目A本身),一切正常.但是,如果我聚合这两个项目(使用多模块POM),我得到以下Maven错误:
Caused by: java.lang.RuntimeException: "No solution found because the problem is unsatisfiable.": ["Unable to satisfy dependency from A 1.0.0.qualifier to package org.apache.axis2.transaction 0.0.0.", "Unable to satisfy dependency from A 1.0.0.qualifier to package org.apache.axis2.addressing.i18n 0.0.0.", ...
Run Code Online (Sandbox Code Playgroud)
为什么以聚合方式构建项目会导致此错误,如果这是Tycho错误,可以采用哪种解决方法?
但是,如果我只在聚合POM中保留一个模块(独立于哪一个),则没有错误.
编辑
无法使用小型,类似的多模块样本进行重现.这意味着我的POM层次结构有所不同.
EDIT2
在包含相同的依赖集(一对轴2和公理库)之后,能够使用类似的小模块样本进行再现.
EDIT3:简约示例
现在我想知道问题是否缺少我所包含的第三方库所需的所有第三方.如果是这样,那么为什么我能够在单独执行两个模块时成功构建,并且只有通过父模块,多模块pom.xml完成构建才会失败?下面的示例仅包含一个单轴2内核JAR,它捆绑在名为first-thirdparty的pom-first工件中.
而不是A,例子有keywoard first.文件夹结构如下:
./pom.xml
./first-thirdparty
pom.xml
./first
src/main/java/org/mydemo/Test.java // has …Run Code Online (Sandbox Code Playgroud) 我对构建基础结构有一个非常具体的要求,即将另一个JAR依赖项的某些内容复制到我的Web应用程序的特定子文件夹中.我们正在使用maven-assembly-plugin,这样做的一个自然方法就是和它<dependencySet>一起使用<unpackOptions>.
代码示例(在程序集描述符中)我看起来如下:
<dependencySet>
<unpack>true</unpack>
<scope>runtime</scope>
<useProjectArtifact>false</useProjectArtifact>
<includes>
<include>my.group:artifact:jar</include>
</includes>
<unpackOptions>
<includes>
<include>subfolder/config.xml</include>
</includes>
</unpackOptions>
<outputDirectory>WEB-INF/otherfolder</outputDirectory>
</dependencySet>
Run Code Online (Sandbox Code Playgroud)
问题是我无法弄清楚如何指定我只想将一个文件复制artifact.jar/subfolder/config.xml到目标WEB-INF/otherfolder.实际结果是WEB-INF/otherfolder/subfolder/config.xml.如您所见,/subfolder将附加到最终路径.有没有办法更改<include>表达式,以便/subfolder不会附加?
提前致谢!
我正在使用 Maven 程序集插件来构建我们产品的 WAR(之前由 Ant 完成)。由于 Apache Ant 有许多遗留问题,因此有一个特定的要求可以使构建过程变得更容易:将依赖项的特定子文件夹(例如 jar 或 war 资源)复制到特定的目标子文件夹。
到目前为止,我了解到程序集描述符允许指定<outputDirectory>,但是有没有机会指定<sourceDirectory>?例如,我想将此规则应用于单个 WAR 或 JAR 类型依赖项。
考虑这个程序集描述符片段的示例(不是 100% 准确):
<dependencySet>
<unpack>true</unpack>
<scope>runtime</scope>
<useProjectArtifact>false</useProjectArtifact>
<includes>
<include>my-specific-dependency:war</include>
</includes>
<outputDirectory>WEB-INF/myresources</outputDirectory>
</dependencySet>
Run Code Online (Sandbox Code Playgroud)
我想说我想将某些文件夹从 my-specific-dependency:war 复制到 WEB-INF/myresources。
编辑注意:我知道这不是一个非常正确的要求,因为我们不应该知道工件内部有什么,正确的方法是声明将整个工件提取到目标目录(简洁的声明方法)。
我目前正致力于在我们的Java Web应用程序中实现企业身份验证机制,包括单点登录.Windows网络是我们的主要目标,而Kerberos听起来是一个合理的选择.旁注:据我所知,Web(HTTP)环境中用于SSO的协议是SPNEGO,它基本上是Kerberos的包装器.因此,听起来Kerberos HTTP SSO库实际上正在使用SPNEGO - 如果我错了,请纠正我.
当我开始调查这个话题时,我意识到没有明显的选择.让我列出那些:
是否有任何特殊原因选择一种选择而不是另一种?周围还有其他选择吗?
将我们的域用户设置为支持Kerberos令牌(Windows Server 2008R2)的AES加密后,在Web应用程序服务器端,我们会收到以下异常:
GSSException:GSS-API级别未指定失败(机制级别:不支持/启用HMAC SHA1-96的加密类型AES256CTS模式)
奇怪的是,我们有Java 6(1.6.0_27),这意味着应该支持AES,根据这个文档:http://docs.oracle.com/javase/6/docs/technotes/guides/security/jgss/jgss- 的features.html
我们的网络应用程序或Java或第三方缺少什么想法?我们正在使用Spring安全Kerberos扩展(使用最少的代码修改来适应我们当前的Spring 2.x版本和其他身份验证要求).
我们正在为客户的 Web 应用程序配置 SSO,但不幸的是我们无权访问域控制器(这是我们不做更多实验来检查假设的又一个原因)。因此,我们要求运行ktpass.exe并准备.ktpass文件以用于我们的服务器配置。
我们面临的问题是“指定版本的密钥不可用”。
我查找了密钥表文件 (knvo = 5),并使用 Wireshark 在我们的 Web 服务器上检查了流量:

如您所见,AP-REQ票证中的 kvno = 1。我认为这是检查 kvno 版本的正确方法。
我知道 Windows 2000 域存在兼容性问题(/kvno 1必须用于 Windows 2000 域兼容性),但据说我们要处理 Windows 2008R2 服务器(我可以看到msDS-Behavior-Version = 4我们的域控制器的值,它与 2008R2 匹配!)。
我们面临着类似W2K域模式的东西吗?
显式 kvno=1 有助于解决问题吗?IE,ktpass.exe [..] /kvno 1
问题在于错误指定的 SPN。它是 HTTP/computer_name@DOMAIN.COM,而不是使用完全限定的域名。这只有在启用 WINS 的情况下才有效,但事实证明并非如此。
使用正确的 SPN 生成密钥表后,一切正常,并且 kvno 根据实际帐户值发送。
请接受解释我观察到的效果的答案。
GWT FileUpload作为一个小部件产生,以便人们可以在表单提交期间上传文件(至少我是如何理解:) :)我想做的是使它看起来更好看并摆脱标准"浏览. .."按钮.
由于我没有良好的GWT经验(也没有JavaScript),我寻找现有的解决方案并找到了一个很好的项目 - gwtupload.这很好,但我意识到我喜欢拥有自己的微型版本(而且,我很好奇它是如何工作的).所以我浏览了代码并尝试提取魔法部分.我意识到使用了GWT FileInput,但是没有显示,并且按钮点击被委托给这个FileInput.在查看gwtupload的源代码后,我试图提取的代码(只有委托点击的部分)包含这个棘手的elem.click()JSNI:
class MyUpload extends Composite {
private static native void clickOnInputFile(Element elem) /*-{
elem.click();
}-*/;
public MyUpload() {
final FileUpload upload = new FileUpload();
AbsolutePanel container = new AbsolutePanel();
// container.add(upload);
Button btn = new Button("My Browse..");
btn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
clickOnInputFile(upload.getElement());
}
});
container.add(btn);
initWidget(container);
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用:单击"我的浏览..."结果没有任何效果(以防万一我也尝试使用未注释的container.add(upload)行运行).能否请您帮助我理解此代码示例中的错误/缺失?
先感谢您.
PS我知道我必须将它放在FormPanel上,我知道如何在Servlet中执行实际的提交/处理; 我唯一想做的就是这种装饰.
我正在使用W3C Geolocation API来检索GWT Web应用程序中的位置信息.Geolocation API的构建方式是一旦检索到位置位置就调用回调函数.
我目前的测试代码如下:
public native void getCoordinates() /*-{
function onPositionUpdate(position) {
var lat = position.coords.latitude;
var lng = position.coords.longitude;
var alt = position.coords.altitude;
// not OK,- doesn't get invoked, and function execution stops at this point
this.@com.test.GpsPanel::testMethod()();
alert("Coordinates retrieved: " + lat + ";" + lng + ";" + alt);
}
function onPositionUpdateFailed(error) {
alert("Some error");
}
if(navigator.geolocation) {
// OK when invoked somewhere here
this.@com.test.GpsPanel::testMethod()();
navigator.geolocation.getCurrentPosition(onPositionUpdate, onPositionUpdateFailed);
} else {
alert("Geolocation is not available");
}
}-*/; …Run Code Online (Sandbox Code Playgroud)