2017-09-18 16 views
0

SOAP 웹 서비스가 있으며 우리의 접근 방식은 WSDL입니다. 아래에는 wsdl을 통해 wsdl에서 생성 된 요청 개체가 pom.xml의 java plugin에 표시됩니다.SOAP 요청을 가로 채기 Enum에 정의 된 것과 요청 유형이 다른 경우 사용자에게 메시지를 전달하는 열거 형 매개 변수

@XmlRootElement (NAME = "XXXRequest") Public 클래스 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; 

TypeOfRequest는 ENUM된다 : 요청 객체가 어떻게 보이는지 이있다. TypeOfRequest에는 7 개의 값이 있습니다. 합시다. 사용자가 TypeOfRequest에 정의 된 7 가지 값 이외의 다른 값을 보내면 NULL이되고 유효성 검사를 통해 사용자가 TypeOfRequest를 실제로 선택하지 않았는지 또는 7 가지 값 이외의 다른 값을 부여했는지 확인할 수 없습니다. 너트 껍데기에서 나는 유효성을 검사하고 사용자가 7 값 이외의 값을 선택하면 의미있는 메시지를 보내려고합니다. 나는 그것을 성취 할 수 없다. 내가 할 수있는 방법이 있습니까? 나는 그것을 가로 챌 수 있지만 그것을 구현하기위한 지침이 필요하다는 생각이 들었다. 우리는 cxf, jaxws 및 Spring 프레임 워크를 사용하고 있습니다.

답변

0

태그는 봄을 사용하고 있음을 나타냅니다. 이 경우에는 spring validation을 살펴볼 수 있습니다. 이를 사용하여 클래스의 계약 인스턴스가 @NonNull 등을 유지하도록 지정하는 주석을 추가 한 다음 인스턴스를 삽입하는 컨트롤러 메소드에 @Valid (또는 @Validated)을 추가 할 수 있습니다.

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

그리고 컨트롤러

:

@GetMapping("/{id}") 
public ResponseEntity<?> get(final @Valid XXXRequest request) { 
    // ... 
} 
+0

THanks. 우리는 SPring을 사용하고 있지만 웹 애플리케이션이 아니므로 SOAP 웹 서비스이므로 제어기가 없습니다. 두 번째 것은 사용자가 TYPEOfRequest에 대해 다른 값을 보내면 Enum이고 null을 얻습니다. Enum의 잘못된 값을 확인할 수 있도록 유효성 검사를 지정하려고합니다. – user3330509

0

감사합니다. 우리는 SPring을 사용하고 있지만 웹 애플리케이션이 아니므로 SOAP 웹 서비스이므로 제어기가 없습니다. 두 번째 것은 사용자가 TYPEOfRequest에 대해 다른 값을 보내면 Enum이고 null을 얻습니다. Enum의 잘못된 값을 확인할 수 있도록 유효성 검사를 지정하려고합니다.

0

해결할 수있었습니다. 내가 수행 한 단계는 다음과 같습니다. 1) 맞춤 어댑터를 만들었습니다.

공용 클래스 RequestXXXXAdapter은 (때문에) 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 단계 : ReqXXXX 열거와 XSD에서 아래에 추가되었습니다.

<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의 유효성을 검사 할 수 있습니다.