Je veux utiliser les Webservices pour créer une...

cancel
Showing results for 
Search instead for 
Did you mean: 
lanfeust44
Member II

Je veux utiliser les Webservices pour créer une...

Bonjour,

Je veux utiliser les Webservices pour créer une appli externe communiquant avec Alfresco, je me suis donc basé sur le SDK.
Le problème est que je n'arrive pas à utiliser un autre Webservice une fois l'authentification faite (j'utilise les Classes AuthenticationUtils et WebServicesFactory), j'ai l'impression qu'il perd immédiatement le ticket ou quelque chose comme ça. J'ai l'erreur suivante :
Exception in thread "main" AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultSubcode:
faultString: WSDoAllReceiver: security processing failed; nested exception is:
   org.apache.ws.security.WSSecurityException: General security error (WSSecurityEngine: Callback supplied no password for: ticket)
faultActor:
faultNode:
faultDetail:
   {http://xml.apache.org/axis/}hostname:memoscope

WSDoAllReceiver: security processing failed; nested exception is:
   org.apache.ws.security.WSSecurityException: General security error (WSSecurityEngine: Callback supplied no password for: ticket)
   at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
   at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
   at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
   at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
   at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(XMLNSDocumentScannerImpl.java:719)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
   at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
   at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
   at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
   at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
   at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
   at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
   at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
   at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
   at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
   at org.apache.axis.client.Call.invoke(Call.java:2767)
   at org.apache.axis.client.Call.invoke(Call.java:2443)
   at org.apache.axis.client.Call.invoke(Call.java:2366)
   at org.apache.axis.client.Call.invoke(Call.java:1812)
   at org.alfresco.webservice.repository.RepositoryServiceSoapBindingStub.getStores(RepositoryServiceSoapBindingStub.java:714)
   at org.alfresco.sample.webservice.GetStores.main(GetStores.java:50)

Quelqu'un a déjà rencontré ce problème ? :rolleyes:
3 Replies
lanfeust44
Member II

Re: Je veux utiliser les Webservices pour créer une...

Je viens d'avancer sur mon problème….
Apparement le serveur Alfresco que j'attaque tourne sur 2 instances. Si j'arrête une des deux instances, je ne reproduit plus l'erreur !
Quelqu'un sait comment garder la main sur la même instance quand on a démarrer une session d'un Webservice.
Je ne sais pas trop où chercher, du côté axis, soap, configuration sur le serveur Alfresco ??
Merci de m'aider Smiley Happy
alexist
Member II

Re: Je veux utiliser les Webservices pour créer une...

Tu as deux instances en cluster, donc tu dois avoir un load balancer en frontal (apache  peut-etre ?) qui repartit sur les serveur alfresco.  Le ticket doit être valable uniquement sur une seule instance alfresco.
Deux solutions :
- met en place la replication des sessions au niveau des ton serveur d'application (alfresco)
- configure ton loadbalancer en sticky session. Par contre, je suis pas sur que ca fonctionne dans le cas d'un webservices
lanfeust44
Member II

Re: Je veux utiliser les Webservices pour créer une...

Merci pour ton aide Smiley Happy  J'ai trouver la solution en modifiant la configuration de la réplication entres les instances :

L2 Cache Replication
Active the extension sample ehcache-custom.xml.sample.cluster, but force the cache of authentication tickets to replicate via copy throughout the cluster:

ehcache-custom.xml



   <cache
       name="org.alfresco.cache.ticketsCache"
       maxElementsInMemory="1000"
       eternal="true"
       overflowToDisk="true">

           <cacheEventListenerFactory
                   class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                   properties="replicatePuts = true,
                               replicateUpdates = true,
                               replicateRemovals = true,
                               replicateUpdatesViaCopy = true,
                               replicateAsynchronously = false"/>
   </cache>

</ehcache>