Fórum

Using service builder to return a list

Tim Cardwell, modificado 11 Anos atrás.

Using service builder to return a list

Junior Member Postagens: 29 Data de Entrada: 19/07/12 Postagens Recentes
I am creating a service that when called upon, will return a list of items that is refreshed with every call to the service.

Basically, I want to get a list of every AssetEntry in a portal, but the only users accessing this service are ones that can only 'get' AssetEntrys in the portal. (No adding or removing)

To give you a better understanding of what I'm trying to do, here is my XXXLocalServiceImpl class:


public class AssetLocalServiceImpl extends AssetLocalServiceBaseImpl{
	public Asset addAsset(String classId) throws SystemException{
		long assetId = CounterLocalServiceUtil.increment(Asset.class.getName());
		Asset asset = assetPersistence.create(assetId);
		asset.setClassId(classId);
		assetPersistence.update(asset, true);
		return asset;
	}
	

	public List<asset> getAssets() throws SystemException, PortalException{
		assetPersistence.removeAll(); //Since the list needs to be updated with every call, we empty the current database.
		
		}

                                       ................


                                       In here is some custom code that I made that will return a list of every AssetEntry in the portal.
                                       Lets call this list AssetEntryCollection

                                       ................
		Iterator<assetentry> entryItr = AssetEntryCollection.iterator();
		AssetEntry temp;
		while(entryItr.hasNext()){
			temp = entryItr.next();
			addAsset(temp.getClassName()); //Add every AssetEntry to our new database
		}
		return assetPersistence.findAll(); //Now that the database has been updated, return the whole thing.
	}

}
</assetentry></asset>



My first question is if this is legal. Most services I've seen don't work like this at all.

My second question has to do with an error I've been getting all day now. This service builds without errors, but when I try to build the wsdd, I get the following:


Buildfile: C:\Program Files (x86)\liferay-portal-6.1.0-ce-ga1\portlets\AssetPublisherTest-portlet\build.xml
compile:
merge:
     [copy] Copying 5 files to C:\Program Files (x86)\liferay-portal-6.1.0-ce-ga1\portlets\AssetPublisherTest-portlet\docroot\WEB-INF\lib
compile-java:
     [copy] Copying 2 files to C:\Program Files (x86)\liferay-portal-6.1.0-ce-ga1\portlets\AssetPublisherTest-portlet\docroot\WEB-INF\classes
merge:
build-wsdd:
     [java] Loading jar:file:/C:/Program%20Files%20(x86)/liferay-portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/system.properties
     [java] Jul 26, 2012 6:58:50 PM com.liferay.portal.kernel.log.Jdk14LogImpl info
     [java] INFO: Global lib directory /C:/Program Files (x86)/liferay-portal-6.1.0-ce-ga1/tomcat-7.0.23/lib/ext/
     [java] Jul 26, 2012 6:58:50 PM com.liferay.portal.kernel.log.Jdk14LogImpl info
     [java] INFO: Portal lib directory /C:/Program Files (x86)/liferay-portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/
     [java] 18:58:50,235 INFO  [EasyConf:122] Refreshed the configuration of all components
     [java] 18:58:50,516 INFO  [ConfigurationLoader:56] Properties for jar:file:/C:/Program%20Files%20(x86)/liferay-portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/portal loaded from [jar:file:/C:/Program%20Files%20(x86)/liferay-portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/com/liferay/portal/tools/dependencies/portal-tools.properties, jar:file:/C:/Program%20Files%20(x86)/liferay-portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/portal.properties]
     [java] Loading jar:file:/C:/Program%20Files%20(x86)/liferay-portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/portal.properties
     [java] Loading jar:file:/C:/Program%20Files%20(x86)/liferay-portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/com/liferay/portal/tools/dependencies/portal-tools.properties
     [java] SLF4J: Class path contains multiple SLF4J bindings.
     [java] SLF4J: Found binding in [jar:file:/C:/Program%20Files%20(x86)/liferay-portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/util-java.jar!/org/slf4j/impl/StaticLoggerBinder.class]
     [java] SLF4J: Found binding in [jar:file:/C:/Program%20Files%20(x86)/liferay-portal-6.1.0-ce-ga1/portlets/AssetPublisherTest-portlet/docroot/WEB-INF/lib/util-java.jar!/org/slf4j/impl/StaticLoggerBinder.class]
     [java] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
     [java]   Java2WSDL tec.echelonllc.liferay.test.service.http.AssetServiceSoap
     [java] 18:58:53,583 WARN  [Types:1704] The class tec.echelonllc.liferay.test.model.Asset does not contain a default constructor, which is a requirement for a bean class.  The class cannot be converted into an xml schema type.  An xml schema anyType will be used to define this class in the wsdl file.
     [java]   WSDL2Java C:\Program Files (x86)\liferay-portal-6.1.0-ce-ga1\portlets\AssetPublisherTest-portlet\20120726185852961\service.wsdl
     [java]   Running Wsdl2javaAntTask with parameters:
     [java]   	verbose:false
     [java]   	debug:false
     [java]   	quiet:false
     [java]   	server-side:true
     [java]   	skeletonDeploy:false
     [java]   	helperGen:false
     [java]   	factory:null
     [java]   	nsIncludes:[]
     [java]   	nsExcludes:[]
     [java]   	factoryProps:[]
     [java]   	testCase:false
     [java]   	noImports:false
     [java]   	NStoPkg:{}
     [java]   	output:C:\Program Files (x86)\liferay-portal-6.1.0-ce-ga1\portlets\AssetPublisherTest-portlet\20120726185852961
     [java] java.io.IOException: Type {http://model.test.liferay.echelonllc.tec}Asset is referenced but not defined.
     [java] 	at org.apache.axis.wsdl.symbolTable.SymbolTable.checkForUndefined(SymbolTable.java:665)
     [java]   	protocolHandlerPkgs:
     [java]   	deployScope:
     [java]   	URL:C:\Program Files (x86)\liferay-portal-6.1.0-ce-ga1\portlets\AssetPublisherTest-portlet\20120726185852961\service.wsdl
     [java]   	all:false
     [java]   	typeMappingVersion:1.2
     [java]   	timeout:45000
     [java]   	failOnNetworkErrors:false
     [java]   	printStackTraceOnFailure:true
     [java] 	at org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:545)
     [java]   	namespaceMappingFile:null
     [java]   	username:null
     [java] 	at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:518)
     [java]   	:passwordnull
     [java]   	:noWrappedfalse
     [java]   	:allowInvalidURLfalse
     [java]   	:implementationClassNamenull
     [java] 	at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:495)
     [java] 	at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:361)
     [java] 	at java.lang.Thread.run(Thread.java:619)
     [java] Exception in thread "main" WSDL processing error for C:\Program Files (x86)\liferay-portal-6.1.0-ce-ga1\portlets\AssetPublisherTest-portlet\20120726185852961\service.wsdl :
     [java]  Type {http://model.test.liferay.echelonllc.tec}Asset is referenced but not defined.
     [java] 	at org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask.execute(Wsdl2javaAntTask.java:304)
     [java] 	at com.liferay.util.ant.Java2WsddTask.generateWsdd(Java2WsddTask.java:108)
     [java] 	at com.liferay.portal.tools.WSDDBuilder._createServiceWSDD(WSDDBuilder.java:130)
     [java] 	at com.liferay.portal.tools.WSDDBuilder.build(WSDDBuilder.java:93)
     [java] 	at com.liferay.portal.tools.WSDDBuilder.main(WSDDBuilder.java:49)
     [java] Caused by: java.io.IOException: Type {http://model.test.liferay.echelonllc.tec}Asset is referenced but not defined.
     [java] 	at org.apache.axis.wsdl.symbolTable.SymbolTable.checkForUndefined(SymbolTable.java:665)
     [java] 	at org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:545)
     [java] 	at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:518)
     [java] 	at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:495)
     [java] 	at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:361)
     [java] 	at java.lang.Thread.run(Thread.java:619)
     [java]   	:classpathnull
     [java]   	http.proxyHost=null
     [java]   	http.proxyPort=null
     [java]   	http.proxyUser=null
     [java]   	http.proxyPassword=null
     [java]   	socks.proxyHost=null
     [java]   	socks.proxyPort=null
     [java] Java Result: 1
BUILD SUCCESSFUL
Total time: 6 seconds


I've read this error all over the internet. I've read that it was a liferay bug that is now fixed, I've read that people have fixed it tampering with the XXXServiceSoap class (This actually worked for me, but the WSDL is deleted after the end of the build), and I've read that it sucks.

Let me know what you guys think,
-Tim
Tim Cardwell, modificado 11 Anos atrás.

RE: Using service builder to return a list

Junior Member Postagens: 29 Data de Entrada: 19/07/12 Postagens Recentes
Turns out everything worked fine, my service is up and running.

I ended up ignoring the build-wsdd error I was getting (I tried before but realized I was using the wrong URI to hit my service) and everything worked as expected.

Yet if anyone comes across a solution to that error let me know.

-Tim