2013-05-31 14 views
7

Sono nuovo ai servizi web di primavera e dopo aver scritto un programma di esempio per un servizio fattoriale mi rimangono alcuni dubbi. Penso che questo è il modo in primavera web-services lavoro: corsaSpring web services flow


applicazioni sul server e genera una richiesta -> Richiesta va a servlet dispatcher come definito in web.xml -> servlet dispatcher sembra per [servlet-name] -servlet.xml -> servlet dispatcher cerca quindi i payloadroot che trova l'endpoint destro -> la richiesta XML va al il punto finale -> risposta è generato dal endpoint


Ora i miei dubbi sono:

  1. Come fa la richiesta che arriva al punto finale è disponibile in forma di XML? So che XSD aiuta a creare xml ma quando lo fa?
  2. In questo intero processo quando viene costruito wsdl?

seguito sono le definizioni di fagioli vale a dire: [servlet-name]-servlet.xml di file:

<beans ...> 
    <bean id="findFactorialService" class="springws.findFactorial.FindFactorialServiceImpl"/> 

    <bean id="findFactorialServiceEndpoint" class="springws.findFactorial.endpoint.FindFactorialServiceEndpoint"> 
     <property name="findFactorialService" ref="findFactorialService" /> 
    </bean> 

    <bean id="payloadMapping" class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping"> 
      <property name="defaultEndpoint" ref="findFactorialServiceEndpoint" /> 
     </bean> 

     <bean id="findFactorialSchema" class="org.springframework.xml.xsd.SimpleXsdSchema"> 
      <property name="xsd" value="/WEB-INF/findFactorialService.xsd" /> 
     </bean> 

     <bean id="findFactorial" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition"> 
      <property name="schema" ref="findFactorialSchema" /> 
      <property name="portTypeName" value="hello" /> 
      <property name="locationUri" value="http://localhost:7070/find-factorial-using-contractfirst/services" /> 
     </bean> 
    </beans> 

risposta

4
  1. L'XSD non genera xml, è utilizzato per convalidarlo. Viene anche utilizzato da persone che scrivono i clienti per capire come formattare il loro xml da inviare al tuo servizio. Una 'richiesta' è un messaggio inviato al tuo servizio da un cliente di qualche tipo - il modo in cui entra nel tuo servizio è, di solito, tramite il protocollo http (il protocollo del world-wide-web).

  2. Nel tuo codice hai menzionato che questo è inteso per essere il primo contratto - il che significa che dovresti scrivere il wsdl prima di fare qualsiasi altra cosa (anche se in genere questo viene fatto in combinazione con l'xsd che descrive l'interfaccia) . Spring può quindi essere configurato con wsdl e alcune annotazioni per elaborare il messaggio - puoi anche associare automaticamente, usando jaxb, direttamente agli oggetti java nel tuo codice in modo da non dover analizzare manualmente il carico utile xml in entrata.

This is old, ma segue lo stesso approccio che si sta utilizzando, e anche usa le stesse classi primavera deprecate.

Molti sviluppatori in questi giorni evitano i servizi Web in stile WS- * a favore dei servizi Web basati su REST, che sono realizzati molto facilmente utilizzando spring-web e spring-mvc, con un paio di semplici annotazioni su un java POJO. Puoi anche avere molla automaticamente per associare il tuo payload xml agli oggetti java generati da xsd, se lo desideri, in modo che di nuovo tu non debba effettivamente trattare con l'XML in qualsiasi momento.

0
  1. primavera utilizza JAXB per serializzare in XML e analizzare da richiesta.
  2. se si utilizza lo JAX-WS, lo WSDL verrà generato in fase di esecuzione (per impostazione predefinita), ma è anche possibile fornire WSDL pre-generato.

Per affrontare il tuo commento:

Se si dà un'occhiata a spring-ws-core dipendenze Maven, si potrà osservare che essa ha una dipendenza a spring-oxm (un'astrazione su XML < - mapping> oggetto), che ha un dipendenza dal progetto jaxb-api.

Dai un'occhiata più da vicino a cosa stai effettivamente utilizzando nelle dipendenze. JAXB potrebbe provenire dalla cartella lib/app del server.

E il secondo punto. JAXB non è solo usato per serializzare in xml, può anche deserializzare dal xml.

+0

1a cosa: non utilizzo alcun servizio o barattolo JAXB. Seconda cosa: JAXB utilizza le classi java per convertire in xml .. ma la richiesta arriva all'endpoint sotto forma di xml solo ... non nel forma di un oggetto .. – Chandeep

+0

ha aggiornato la risposta – WeMakeSoftware

Problemi correlati