Java backend webscript e Spring
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-27-2011 11:16 AM
Ciao a tutti.
Ho creato un nuovo webscript con java ma ho dei problemi sul caricamento delle property definite nel file spring dello script.
Per meglio capire:
nel mio file test-context.xml ho questa definizione:
<beans>
<bean id="webscript.org.alfresco.xxxx.test.test.get"
class="org.alfresco.xxxx.test.MyClass" parent="webscript">
<property name="repository" ref="repositoryHelper"/>
<property name="serviceRegistry" ref="ServiceRegistry" />
</bean>
</beans>
e nella classe java ho:
….
private ServiceRegistry serviceRegistry;
public void setServiceRegistry (ServiceRegistry serviceRegistry) {
this.serviceRegistry = serviceRegistry;
}
…..
do logic etc etc
….
Il problema sorge quando viene eseguita questa linea di codice:
Collection<QName> coll = serviceRegistry.getServices();
Ottengo questa eccezione:
17:00:54,609 ERROR [extensions.webscripts.AbstractRuntime] Exception from executeScript - redirecting to status template error: 04270001 Wrapped Exception (with status template): null
org.springframework.extensions.webscripts.WebScriptException: 04270001 Wrapped Exception (with status template): null
at org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:758)
at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:171)
at org.alfresco.repo.web.scripts.RepositoryContainer$2.execute(RepositoryContainer.java:383)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:381)
at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:436)
at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:466)
at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:304)
at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:352)
at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:189)
at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:118)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:58)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.UnsupportedOperationException
at org.alfresco.repo.service.ServiceDescriptorRegistry.getServices(ServiceDescriptorRegistry.java:112)
at org.alfresco.xxxxx.test.MyClass.executeImpl(MyClass.java:44)
at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:64)
… 24 more
Dov'è l'errore?
La versione di alfresco che sto utilizzando è la 3.4 Enterprise Edition nella versione TRial
Ciao
Grazie
Marco
Ho creato un nuovo webscript con java ma ho dei problemi sul caricamento delle property definite nel file spring dello script.
Per meglio capire:
nel mio file test-context.xml ho questa definizione:
<beans>
<bean id="webscript.org.alfresco.xxxx.test.test.get"
class="org.alfresco.xxxx.test.MyClass" parent="webscript">
<property name="repository" ref="repositoryHelper"/>
<property name="serviceRegistry" ref="ServiceRegistry" />
</bean>
</beans>
e nella classe java ho:
….
private ServiceRegistry serviceRegistry;
public void setServiceRegistry (ServiceRegistry serviceRegistry) {
this.serviceRegistry = serviceRegistry;
}
…..
do logic etc etc
….
Il problema sorge quando viene eseguita questa linea di codice:
Collection<QName> coll = serviceRegistry.getServices();
Ottengo questa eccezione:
17:00:54,609 ERROR [extensions.webscripts.AbstractRuntime] Exception from executeScript - redirecting to status template error: 04270001 Wrapped Exception (with status template): null
org.springframework.extensions.webscripts.WebScriptException: 04270001 Wrapped Exception (with status template): null
at org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:758)
at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:171)
at org.alfresco.repo.web.scripts.RepositoryContainer$2.execute(RepositoryContainer.java:383)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:381)
at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:436)
at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:466)
at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:304)
at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:352)
at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:189)
at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:118)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:58)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.UnsupportedOperationException
at org.alfresco.repo.service.ServiceDescriptorRegistry.getServices(ServiceDescriptorRegistry.java:112)
at org.alfresco.xxxxx.test.MyClass.executeImpl(MyClass.java:44)
at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:64)
… 24 more
Dov'è l'errore?
La versione di alfresco che sto utilizzando è la 3.4 Enterprise Edition nella versione TRial
Ciao
Grazie
Marco
Labels:
- Labels:
-
Archive
3 REPLIES 3
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-28-2011 05:36 PM
Ciao Marco,
L'operazione non è implementata: http://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root/projects/repository/source/jav...
Come puoi vedere il metodo non è chiamabile:
Di solito infatti i servizi non vengono caricati utilizzando direttamente e programmaticamente il ServiceRegistry, ma bensi iniettati via Spring.
Per un esempio, il seguente bean riceve un nodeArchiveService da Spring:
Hope it helps.
L'operazione non è implementata: http://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root/projects/repository/source/jav...
Come puoi vedere il metodo non è chiamabile:
public Collection<QName> getServices() { // TODO: Implement throw new UnsupportedOperationException(); }
Secondo me dipende dal fatto che in effetti non esiste una interfaccia a fattor comune dei vari servizi, in quanto ciascuno ha delle peculiarità che rende difficile scrivere del codice generico sui servizi. Non resta che fare la "get" del singolo servizio che si intende utilizzare.Di solito infatti i servizi non vengono caricati utilizzando direttamente e programmaticamente il ServiceRegistry, ma bensi iniettati via Spring.
Per un esempio, il seguente bean riceve un nodeArchiveService da Spring:
[…]public class Purge extends DeclarativeWebScript { final Logger logger = LoggerFactory.getLogger(Purge.class); private NodeArchiveService nodeArchiveService; public void setNodeArchiveService(NodeArchiveService nodeArchiveService) { this.nodeArchiveService = nodeArchiveService; } @Override protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) { logger.info("@@@ Purging all archived nodes… "); final long start = System.currentTimeMillis(); try { this.nodeArchiveService.purgeAllArchivedNodes(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); } catch (Throwable t) { logger.error("@@@ Error executing purge ", t); errorMessage(status, Status.STATUS_INTERNAL_SERVER_ERROR, "Runtime error: " + t.getMessage() + ". Cause: " + t.getCause()); return null; } final long elapsed = System.currentTimeMillis() - start; Map<String, Object> model = new HashMap<String, Object>(); model.put("elapsed", elapsed); logger.info("@@@ Elapsed time (ms): " + elapsed); return model; } private void errorMessage(Status status, int code, final String message) { status.setCode(code); status.setMessage(message); status.setRedirect(true); }}
E' inizializzato dal seguente context:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans> <bean id="webscript.it.alfresco.util.purge.get" class="it.alfresco.util.Purge" parent="webscript"> <property name="nodeArchiveService" ref="nodeArchiveService"/> </bean></beans>
(Riferimento: http://camelcase.blogspot.com/2011/03/purge-alfresco-archived-nodes.html)Hope it helps.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-30-2011 04:18 AM
Ciao,
grazie, tutto molto chiaro!
Però dove posso trovare una lista aggiornata dei servizi che posso iniettare via spring?
Marco
grazie, tutto molto chiaro!
Però dove posso trovare una lista aggiornata dei servizi che posso iniettare via spring?
Marco
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-30-2011 09:09 AM
Puoi partire da http://wiki.alfresco.com/wiki/Specification
e http://wiki.alfresco.com/wiki/Java_Foundation_API
Quindi i Javadoc:
http://wiki.alfresco.com/wiki/Alfresco_JavaDoc
Un elenco di servizi attivi è presente nel context Spring public-services-context.xml che trovi sia in Alfresco che nello SDK.
Consiglio comunque di seguire qualche buon libro, un elenco parziale si trova nella prima pagina del wiki http://wiki.alfresco.com/wiki/Main_Page
e http://wiki.alfresco.com/wiki/Java_Foundation_API
Quindi i Javadoc:
http://wiki.alfresco.com/wiki/Alfresco_JavaDoc
Un elenco di servizi attivi è presente nel context Spring public-services-context.xml che trovi sia in Alfresco che nello SDK.
Consiglio comunque di seguire qualche buon libro, un elenco parziale si trova nella prima pagina del wiki http://wiki.alfresco.com/wiki/Main_Page
