2017-09-02 7 views
2

dans mon schéma je élément suivant:Comment activer la validation selon WSDL - démarrage du ressort et le ressort-ws

<xs:element name="deletePokemonsRequest"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="pokemonId" type="xs:int" minOccurs="1" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Et je endpoint pour elle:

@PayloadRoot(namespace = NAMESPACE_URI, localPart = "deletePokemonsRequest") 
@ResponsePayload 
public DeletePokemonsRequest deletePokemons(@RequestPayload DeletePokemonsRequest deletePokemons){ 
    pokemonDAO.deletePokemons(deletePokemons.getPokemonId()); 
    return deletePokemons; 
} 

Lorsque j'envoie sur ce point d'extrémité:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pok="www"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <pok:deletePokemonsRequest>    
     </pok:deletePokemonsRequest> 
    </soapenv:Body> 
</soapenv:Envelope> 

Il est accepté, mais il doit être rejeté lors de la validation. Pourquoi ? Parce que j'ai mis minOccurs=1, mais il a accepté l'enveloppe avec 0 éléments.
Comment activer la validation selon WSDL?

Répondre

4

Configurez un intercepteur de validation.

xml config

<bean id="validatingInterceptor" class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor"> 
    <property name="xsdSchema" ref="schema" /> 
    <property name="validateRequest" value="true" /> 
    <property name="validateResponse" value="true" /> 
</bean> 
<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema"> 
    <property name="xsd" value="your.xsd" /> 
</bean> 

ou java config

@Configuration 
@EnableWs 
public class MyWsConfig extends WsConfigurerAdapter { 

    @Override 
    public void addInterceptors(List<EndpointInterceptor> interceptors) { 
     PayloadValidatingInterceptor validatingInterceptor = new PayloadValidatingInterceptor(); 
     validatingInterceptor.setValidateRequest(true); 
     validatingInterceptor.setValidateResponse(true); 
     validatingInterceptor.setXsdSchema(yourSchema()); 
     interceptors.add(validatingInterceptor); 
    } 

    @Bean 
    public XsdSchema yourSchema(){ 
     return new SimpleXsdSchema(new ClassPathResource("your.xsd")); 
    } 
    // snip other stuff 
} 
+0

Qu'en est-il dans le cas de nombreux fichiers .xsd? –

+0

@HaskellFun PayloadValidatingInterceptor a également la méthode setXsdSchemaCollection() pour la liste des schémas – eis

+0

J'ai un problème avec de nombreux fichiers. Pourriez-vous joindre un exemple avec de nombreux fichiers xsd? –