2016-12-15 1 views
0

J'ai une application Java exposant une API SOAP via Jetty. Je peux accéder avec succès à mon WSDL et forger une demande, mais le webparam envoyé est toujours nul. Je ne sais pas comment déboguer ce problème. Ici, j'ai quelques extraits des fonctions impliquées dans la demande. Je vais modifier si vous avez besoin de plus amples informations:@WebParam est toujours nul dans la jetée servant de savon

@WebMethod(
     operationName = "findEvent" 
    ) 
    public ServiceEventDto findEvent(
      @WebParam(name = "eventId") Long eventId) throws InstanceNotFoundException { 
     Event event 
       = EventServiceFactory.getService().findEvent(eventId); 
     return EventToEventDtoConversor.toEventDto(event); 
    } 

Ceci est la demande:

<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:eve="http://ws.udc.es/event"> 
<x:Header/> 
<x:Body> 
    <eve:findEvent> 
     <eve:eventId>0</eve:eventId> 
    </eve:findEvent> 
</x:Body> 

Merci à l'avance.

+0

donc le code a findInvite et inviteId et le XML a findEvent et eventId – slipperyseal

+0

@SlipperySeal Désolé, j'ai copié le mauvais code, je vais le réparer maintenant. –

Répondre

1

Je crois que le problème est que votre entrée SOAP utilise le préfixe d'espace de noms eve pour l'élément d'entrée eventId.

Essayez ceci:

<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:eve="http://ws.udc.es/event"> 
<x:Header/> 
<x:Body> 
    <eve:findEvent> 
     <eventId>0</eventId> 
    </eve:findEvent> 
</x:Body> 

j'ai pu recréer en utilisant le fournisseur de services suivants à la jetée 9.4:

Interface de point de terminaison de service:

package org.example.sampleservice; 

import javax.jws.WebMethod; 
import javax.jws.WebParam; 
import javax.jws.WebService; 

@WebService(targetNamespace="http://ws.udc.es/event") 
public interface SampleService { 

    @WebMethod(operationName = "findEvent") 
     public ServiceEventDto findEvent(@WebParam(name = "eventId") Long eventId) throws InstanceNotFoundException; 

} 

mise en œuvre du service:

package org.example.sampleservice; 

import javax.annotation.Resource; 
import javax.jws.WebMethod; 
import javax.jws.WebParam; 
import javax.jws.WebService; 
import javax.xml.ws.WebServiceContext; 

@WebService(endpointInterface = "org.example.sampleservice.SampleService", targetNamespace="http://ws.udc.es/event") 
public class SampleServiceImpl implements SampleService { 

    @Resource 
    private WebServiceContext ctx; 

    @WebMethod(operationName = "findEvent") 
    public ServiceEventDto findEvent(@WebParam(name = "eventId") Long eventId) throws InstanceNotFoundException { 
     System.out.println("SampleServiceImpl: received eventId " + eventId); 
     return new ServiceEventDto(); 
    } 

} 

Lorsque j'utilise votre entrée d'origine avec <eve:eventId>0</eve:eventId> j'observe la sortie suivante:

SampleServiceImpl: received eventId null

Quand j'utilise <eventId>0</eventId> je vois le résultat attendu: cependant,

SampleServiceImpl: received eventId 0

Si, vous êtes devrait accepter <eve:eventId> vous pouvez également ajuster votre @WebParam pour ajouter targetNamespace comme suit:

@WebParam(name = "eventId", targetNamespace="http://ws.udc.es/event") Long eventId 

Quand je change mon fournisseur de services de cette façon, la sortie est inversée et <eve:eventId> n'est plus null.

+0

Ceci devrait être accepté comme une solution. L'ajout de 'targetNamespace' m'a aidé à résoudre un problème similaire. – zygimantus