当前位置: 首页 > 知识库问答 >
问题:

如果请求类型与Enum中定义的不同,截取SOAP请求Enum参数以发送消息给用户

湛铭
2023-03-14

我们有SOAP webservice,我们的方法首先是WSDL。下面你可以看到从wsdl通过wsdl到java插件生成的请求对象pom.xml.这就是请求对象的样子:

@XmlRootElement(name="XXXRequest")公共类GetXXXRequest{

@XmlElement(name = "XXX", required = true)
@XmlJavaTypeAdapter(XX .class)
protected String x;
@XmlElement(name = "YYY", required = true)
@XmlJavaTypeAdapter(XX .class)
protected String y;
@XmlElement(name = "ZZZ", required = true)
@XmlJavaTypeAdapter(XX .class)
protected String z;
@XmlElement(name = "TTT", required = true)
@XmlJavaTypeAdapter(XX.class)
protected String t;
@XmlElement(name = "TypeOfRequest", required = true)
protected TypeOfRequest type;
@XmlElement(name = "Criteria", required = true)
protected Criteria criteria;

类型请求是ENUM。现在TypeOfRequest有7个值。让我们说用户发送任何其他值,而不是在TypeOfRequest中为它定义的7个值,那么它就会成为NULL,我们的验证不能验证它,看看用户是否真的没有选择任何TypeOfRequest或给出一些其他值,而不是7个值。所以在螺母壳我想验证和发送有意义的消息,如果用户选择任何其他值7值以外。我无法实现它。有什么办法我能做到吗?我有一个想法,我可以拦截它,但需要指导来实施它。我们正在使用cxf、jaxws和Spring框架。

共有3个答案

邹齐智
2023-03-14

我能够解决它。我所做的步骤是:1)创建一个自定义适配器。

公共类RequestXXAdapter扩展了XmlAdapter{

@Override
public ReqXXXX unmarshal(String v) throws Exception {
    try {
        return ReqXXX.valueOf(v);
    } catch(Exception e) {
        throw new JAXBException("Invalid parameter");
    }
}

@Override
public String marshal(ReqXXXX type) throws Exception {
    return type.name();
}

}

步骤2:在xsd中添加以下ReqXXXX枚举。

<xs:annotation>
   <xs:appinfo>
    <xjc:javaType name="com.XX.XX.XX.ReqXXXX"
      adapter="com.xx.xx..yy.ReqXXXAdapter" /> 
   </xs:appinfo>
</xs:annotation>

......

所以上面的代码生成了注解XmlJavaTypeAdapter@XmlJavaTypeAdapter(ReqTXXXXAdapter.class)保护ReqXXXX reqxxxx;

因此,现在有了这个更改,我可以在我的serviceimpl命中之前验证Enum。

鲁财
2023-03-14

谢谢我们使用的是SPring,但它不是一个web应用程序,而是SOAP web服务,因此没有控制器。第二件事是,若用户为TYpeOfRequest发送不同的值,即Enum,那个么我们将得到null。我想进行验证,以便验证Enum的错误值。

祁鸿哲
2023-03-14

您的标签暗示您正在使用Spring;在这种情况下,您可能需要查看Spring验证。使用它,您可以添加注释,指定类的契约实例应该维护:@NonNull等。,然后在注入实例的控制器方法中添加@Valid(或@Valated)。

public class XXXRequest {
    // ...
    protected @NonNull TypeOfRequest type;
    // ...
}

控制器中:

@GetMapping("/{id}")
public ResponseEntity<?> get(final @Valid XXXRequest request) {
    // ...
}
 类似资料:
  • 问题内容: 是否可以使用Python的库发送SOAP请求? 问题答案: 确实有可能。 这是一个使用普通请求lib调用Weather SOAP Service的示例: 一些注意事项: 标头很重要。没有正确的标头,大多数SOAP请求将无法工作。可能是更 正确 使用的标头(但weatherservice更喜欢 这将以xml字符串形式返回响应-然后,您需要解析该xml。 为简单起见,我以纯文本形式包含了该

  • 问题内容: 我正在尝试向SOAP Web服务发送请求。我阅读了本教程并准备了以下代码。但是,我将向多个SOAP Web服务发送不同的请求,而本教程只关注一个请求。如何使用发送SOAP请求? WebServiceTemplate 问题答案: 您可以使用以下代码,而无需在xml文件中定义任何内容。

  • 我需要使用gRPC从不同类型但语义相关的服务器获取一些数据。你可以把它看作是一个数据类型,可以有a、B和C。我在想,将这些数据传输到客户机的正确方法是什么。我个人可以想出三种不同的方法: 使用带有的单个消息: 在这个方法中,我只定义了一条消息,如下所示: 现在我只添加了一个rpc方法,它可以获取不同类型的数据。这种方法的问题是可扩展性。我将无法通过向此处所述的添加新的消息类型来更新我的消息(或者至

  • 好的,我对网络服务完全陌生,对于我正在做的一个项目,我试图了解整个SOAP。我想我对正在发生的事情有一个模糊的理解,但是我缺少一些具体的信息,我在谷歌上找不到任何有用的东西。 我已经阅读了其他人提出的问题,例如使用java向Web服务发出的SOAP请求,但我仍然无法完全弄清楚发生了什么。 具体来说,我尝试使用这里提供的服务http://ec.europa.eu/taxation_customs/v

  • 我从来没有用过肥皂。我搜索了一下,找到了一些例子。 我的目标是发送这样的肥皂请求 有人能告诉我如何发送这样的肥皂请求吗?或者给我一个例子或教程来发送这样的肥皂。谢谢大家。

  • 我用的是Spring靴。我已经为SOAP web服务编写了一个ClientInterceptor,我想记录我要向其发送请求的URL,并且我想在HandlerResponse方法中这样做。然而,我找不到一个方法来做到这一点。有可能吗?任何帮助都会很好。 创建restTemplate的方式