gpt4 book ai didi

java - JAX-WS 使用@SchemaValidation 在 WebLogic 中验证模式

转载 作者:行者123 更新时间:2023-11-29 03:13:17 25 4
gpt4 key购买 nike

我找不到解决方案,但我发现更多人陷入同样的​​问题,所以我将其张贴在这里。


默认情况下,JAX-WS 服务器(至少对于 WebLogic 而言)不会验证接收到的消息及其相关架构。

这会导致很多问题,因为任何无效值(错误的 xsd:dateTime 格式、数字字段中的字母等)都会导致 Java 对象中的 null 值,包括强制字段。

我需要做的是服务器应提供的简单验证。

import com.sun.xml.internal.ws.developer.SchemaValidation;

@Stateless
@WebService(portName="ValidatedService")
@SchemaValidation
public class ValidatedService {

public void operation(@WebParam(name="request") ValidatedRequest request) {

/* do stuff */
}
}

出于某种原因,当我尝试使用提供的架构验证时,出现以下异常:

Caused By: javax.xml.ws.WebServiceException: Annotation @com.sun.xml.internal.ws.developer.SchemaValidation(handler=class com.sun.xml.internal.ws.server.DraconianValidationErrorHandler) is not recognizable, atleast one constructor of class com.sun.xml.internal.ws.developer.SchemaValidationFeature should be marked with @FeatureConstructor

我不想实现任何自定义 validator 。服务器应通过简单直接的配置提供此类服务。

最佳答案

问题是:我为 @SchemaValidation 使用了错误的包。

对我有用的正确类是 com.sun.xml.ws.developer.SchemaValidation,它在文件 mw_home 中提供\modules\glassfish.jaxws.rt_1.3.0.0_2-1-5.jar(使用 WLS 10.3.6)。

在前面的代码段中,我引用了错误的包:com.sun.xml.internal...但是使用 WebLogic 提供的包立即生效。

如果您使用 Maven 并使用捆绑的 JAR 作为依赖项,您可能在类路径中没有这个库,这导致了我的问题。您需要通过依赖项(仅限 provided 作用域)将其添加到您的类路径中,并在您的 JAX-WS WebService 类中为该类名称引用正确的包(抽象类不会这样做)。

更多信息在 Enabling Schema Validation on the Server页面。

这个模式验证目前对我来说已经足够了,因为我不需要任何自定义行为。

关于java - JAX-WS 使用@SchemaValidation 在 WebLogic 中验证模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28070129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com