我们有两个应用程序,其中一个应用程序是基于Eclipse GUI的桌面UI应用程序-使用Java8和Eclipse Ganymede第二个应用程序,最近从Java8迁移到Java 17和Springboot2.7到Springboot3.2
第二个应用程序服务于多个目的,它与数据库连接,并通过SOAP API获得数据库,现在桌面应用程序从SpringBoot应用程序调用SOAP API,并将数据呈现到桌面应用程序中。
一切正常,我们能够获得数据,但迁移到最新版本的Java 17和Springboot后,SOAP API失败,我得到下面的异常
org.w3c.dom.DOMException:NAMESPACE_ERR:试图以不正确的命名空间方式创建或更改对象。
代码片段
@PayloadRoot(namespace = Constants.Namespace.Internal, localPart = "loginRequest")
@ResponsePayload
public LoginResponse login(@RequestPayload LoginRequest request)
throws PasswordExpiredFaultException, LicenseFaultException, LoginFaultException {
try {
return loginProcessor.process(request);
} catch (CatalogAPIException catAPIExp) {
if (catAPIExp.getMessage().equals(localeService.getMessage("security.password.expired"))) {
throw new PasswordExpiredFaultException(localeService.getMessage("security.password.expired"));
}else if (catAPIExp.getMessage().equals(localeService.getMessage("security.invalid.username.password"))) {
throw new LoginFaultException(localeService.getMessage("op.security.invalid.username.password"));
} else if (catAPIExp.getMessage().equals(localeService.getMessage("security.account.locked"))) {
throw new LoginFaultException(localeService.getMessage("op.security.account.locked"));
} else {
throw new LoginFaultException(catAPIExp.getMessage());
}
}
}
字符串
以前使用的spring-ws-core
3.1.1更新到4.0.8。未做任何XML更改。
1条答案
按热度按时间wvmv3b1j1#
感谢@ jdjs。不知何故,我设法解决了这个问题。正如我的问题中所述,我们最近完成了从Java 8到Java 17的迁移,并将Sping Boot 版本从2.7升级到3.2。这个迁移需要大量的代码更改,包括对SOAP响应处理程序的大量修改。以前我们使用的代码如下所示
字符串
但是现在QName类在Java 17中不可用,所以我修改了代码如下
型
现在上面的代码是因为这一行创建的问题
型
如果我们检查这个方法的官方定义,它是这样的
型
我在这里传递了错误的参数,所以我必须像这样使用这个方法
型
解决了这个问题。
仅供参考。
型
javax.*
到jakarta.*
的迁移对项目影响很大。