cancel
Showing results for 
Search instead for 
Did you mean: 

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

lanfeust44
Champ in-the-making
Champ in-the-making
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 3

lanfeust44
Champ in-the-making
Champ in-the-making
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
Champ in-the-making
Champ in-the-making
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
Champ in-the-making
Champ in-the-making
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>