当前位置: 首页 > 面试题库 >

使用@SchemaValidation的WebLogic中的JAX-WS验证架构

涂浩皛
2023-03-14
问题内容

我找不到解决方案,发现更多人陷入同一问题,因此我将其发布在这里。

默认情况下,JAX-WS服务器(至少用于WebLogic)将不验证通过其关联架构接收到的消息。

由于任何无效值(错误的xsd:dateTime格式,数字字段中的字母等)都将导致Java对象(包括必填字段)中的 值,从而导致很多问题。

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

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

我不希望实现任何自定义验证器。服务器应使用简单明了的配置来提供此类服务。


问题答案:

问题是:我使用了错误的软件包@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。 内部 …但是使用WebLogic提供的功能可以立即工作。

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

“服务器”页面上的

启用架构验证”中的更多信息。

由于我不需要任何自定义行为,因此此模式验证对我而言已经足够。



 类似资料:
  • 问题内容: 我有一个已导入xsd的wsdl,此xsd具有类似如下的限制: 因此,我想细想一下,当我通过netbeans将这个耳朵部署到glassfish上时,将对传入的数据进行验证,但事实并非如此。在将数据传递给我的@WebService对象并转换为Java对象之前,是否需要进行任何调用以确保数据经过验证。 问题答案: 使用SchemaValidation批注。 请注意,它仅适用于文档/文字样式的

  • 我在weblogic 10.3.6中用JAX-WS实现了一个到不同类型Web服务的连接器,该连接器可以配置为2waySSL和代理,并将两者结合起来。 > 使用代理的实现使用ClientProxyFeature正常工作。 与使用自定义SSLSocketFactory的2waySSL相同,Oracle在留档中说。通过SSL保持请求的状态(仅限JAX-WS) 当组合这两个功能时会出现问题。握手没有发生(

  • 问题内容: 我构建了一个最小的Web服务,并使用javax.xml.ws.Endpoint发布了它。如果我尝试获得WSDL, 它就可以正常工作。 尝试在接收它,我什么也没收到。该地址与本地主机相同。 是否可以在不提供地址的情况下发布网络服务? 将代码更改为 在IP地址上获取wsdl,但不在本地主机上获取。 是否没有可能仅定义端口? 问题答案: 您可以尝试在0.0.0.0上发布它吗?

  • 我正在使用Apache CXF开发一个JAX-WS服务,它的类型定义来自两个来源。XSD模式文件在.../types/namespace中定义各种类型,并且有与JAXB注释相匹配的java类。endpoint是在Java inteface中定义的,在.../service/命名空间中有@WebService相关的注释。WSDL由Apache CXF生成,它使用XSD模式文件中的类型定义以及从@We

  • 如果有一个相当大的模式在多个Web服务中使用,那么我想将XSD编译与WSDL编译分开。在一个简化的示例中,一步编译可以: 编译xsd并使用生成的剧集文件不起作用: 那么如何在wsimport中使用预编译的模式呢? 附录:在另一个模式中使用该剧集可以工作,并避免新的编译 (d3.jar包含来自模式 3 模式 3.episode 的生成类作为 META-INF/太阳-jaxb.episode): 没有

  • JAX-WS (JavaTM API for XML-Based Web Services)规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。 在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要