chemistry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dave Brosius <dbros...@mebigfatguy.com>
Subject Re: NPE trying to session.getRootFolder
Date Fri, 21 Feb 2014 16:59:18 GMT
 

In jaxws-rt-2.2.6-6.jar, the code

com.sun.xml.ws.api.client.ServiceInterceptorFactory.java

method 

 public static @NotNull ServiceInterceptor load(@NotNull WSService
service, @Nullable ClassLoader cl) {
 List<ServiceInterceptor> l = new ArrayList<ServiceInterceptor>();

 // first service look-up
 for( ServiceInterceptorFactory f :
ServiceFinder.find(ServiceInterceptorFactory.class))
 l.add(f.create(service));

 // then thread-local
 for( ServiceInterceptorFactory f : threadLocalFactories.get())
 l.add(f.create(service));

 return ServiceInterceptor.aggregate(l.toArray(new
ServiceInterceptor[l.size()]));
 }

SHOULD PROBABLY BE

 public static @NotNull ServiceInterceptor load(@NotNull WSService
service, @Nullable ClassLoader cl) {
 List<ServiceInterceptor> l = new ArrayList<ServiceInterceptor>();

 // first service look-up
 for( Object f : ServiceFinder.find(ServiceInterceptorFactory.class)) {
 if (f instanceof ServiceInterceptorFactory)
 l.add(f.create(service));
 }

 // then thread-local
 for( ServiceInterceptorFactory f : threadLocalFactories.get())
 l.add(f.create(service));

 return ServiceInterceptor.aggregate(l.toArray(new
ServiceInterceptor[l.size()]));
 }

---
<br type="_moz" />

On 2014-02-21 11:41, Dave Brosius wrote:
> Caused by: java.lang.ClassCastException: Cannot cast
> weblogic.wsee.jaxws.spi.WLSServiceInterceptorFactory to
> com.sun.xml.ws.api.client.ServiceInterceptorFactory
> at java.lang.Class.cast(Class.java:3094)
> at com.sun.xml.ws.util.ServiceFinder$LazyIterator.next(ServiceFinder.java:460)
> at
> com.sun.xml.ws.util.ServiceFinder$CompositeIterator.next(ServiceFinder.java:402)
> at
> com.sun.xml.ws.api.client.ServiceInterceptorFactory.load(ServiceInterceptorFactory.java:84)
> at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:245)
> at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:205)
> at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:195)
> at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:112)
> at javax.xml.ws.Service.<init>(Service.java:92)
> at
> org.apache.chemistry.opencmis.commons.impl.jaxb.RepositoryService.<init>(RepositoryService.java:46)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> at
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
> at
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
> at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
> at
> org.apache.chemistry.opencmis.client.bindings.spi.webservices.AbstractPortProvider$CmisServiceHolder.createServiceObject(AbstractPortProvider.java:200)
> at
> org.apache.chemistry.opencmis.client.bindings.spi.webservices.AbstractPortProvider$CmisServiceHolder.<init>(AbstractPortProvider.java:187)
> at
> org.apache.chemistry.opencmis.client.bindings.spi.webservices.AbstractPortProvider.initServiceObject(AbstractPortProvider.java:514)
> at
> org.apache.chemistry.opencmis.client.bindings.spi.webservices.AbstractPortProvider.getPortObject(AbstractPortProvider.java:454)
> at
> org.apache.chemistry.opencmis.client.bindings.spi.webservices.AbstractPortProvider.getRepositoryServicePort(AbstractPortProvider.java:280)
> at
> org.apache.chemistry.opencmis.client.bindings.spi.webservices.RepositoryServiceImpl.getRepositoryInfos(RepositoryServiceImpl.java:69)
> at
> org.apache.chemistry.opencmis.client.bindings.impl.RepositoryServiceImpl.getRepositoryInfos(RepositoryServiceImpl.java:85)
> at
> org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl.getRepositories(SessionFactoryImpl.java:109)
> at
> org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl.getRepositories(SessionFactoryImpl.java:96)
> 
> 
> 
> com.sun.xml.ws.api.client.ServiceInterceptorFactory: Provider
> weblogic.wsee.jaxws.spi.WLSServiceInterceptorFactory is specified in
> jar:file:/home/dave/Oracle/Middleware/Oracle_Home/oracle_common/modules/com.oracle.webservices.wls.wls-ws-metainf-services_2.0.0.0.jar!/META-INF/services/com.sun.xml.ws.api.client.ServiceInterceptorFactorybut
could not be instantiated: java.lang.ClassCastException: Cannot cast weblogic.wsee.jaxws.spi.WLSServiceInterceptorFactory
to com.sun.xml.ws.api.client.ServiceInterceptorFactory
> 
> 
> 
> 
> ---
> <br type="_moz" />
> 
> On 2014-02-21 11:32, Dave Brosius wrote:
>> I've added more to paths to my <prefer-application-packages> in my ear
>>
>>
>> and now i get
>>
>> Caused by: java.lang.ClassCastException: Cannot cast
>> weblogic.wsee.jaxws.spi.WLSServiceInterceptorFactory to
>> com.sun.xml.ws.api.client.ServiceInterceptorFactory
>>
>> Now this SPI is found in jaxws-rt-2.2.26-6.jar and is
>> javax.xml.ws.spi.Provider=com.sun.xml.ws.spi.ProviderImpl there
>>
>> and i have
>>
>> <prefer-application-packages>
>> <package-name>javax.xml.ws.*</package-name>
>> ....
>>
>>
>> in my weblogic-application.xml in my ear, so it should be using that
>> jar. But yet it is still picking up WLSServiceInterceptorFactory thru
>> spi somehow.
>>
>> Anyone know what my problem is?
>>
>>
>> ---
>> <br type="_moz" />
>>
>> On 2014-02-20 17:08, Dave Brosius wrote:
>>> It must be a classloader issue with some jar in wls, as this web app fails
>>>
>>> package com.suckage;
>>>
>>> import java.io.IOException;
>>> import java.net.Authenticator;
>>> import java.net.PasswordAuthentication;
>>> import java.util.HashMap;
>>> import java.util.List;
>>> import java.util.Map;
>>>
>>> import javax.servlet.ServletException;
>>> import javax.servlet.http.HttpServlet;
>>> import javax.servlet.http.HttpServletRequest;
>>> import javax.servlet.http.HttpServletResponse;
>>>
>>> import org.apache.chemistry.opencmis.client.api.Folder;
>>> import org.apache.chemistry.opencmis.client.api.Repository;
>>> import org.apache.chemistry.opencmis.client.api.Session;
>>> import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;
>>> import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
>>> import org.apache.chemistry.opencmis.commons.SessionParameter;
>>> import org.apache.chemistry.opencmis.commons.enums.BindingType;
>>>
>>> public class CmisServlet extends HttpServlet {
>>>
>>> private Repository repository = null;
>>> private Session session = null;
>>>
>>> @Override
>>> public void init() throws ServletException {
>>> super.init();
>>>
>>> List<Repository> repositories =
>>> SessionFactoryImpl.newInstance().getRepositories(getProps());
>>>
>>> for (Repository rep : repositories) {
>>> if (rep.getName().equalsIgnoreCase("Main Repository")) {
>>> repository = rep;
>>> break;
>>> }
>>> }
>>>
>>> session = repository.createSession();
>>> }
>>>
>>> @Override
>>> protected void doGet(HttpServletRequest request,
>>> HttpServletResponse response)
>>> throws ServletException, IOException {
>>>
>>> if (session != null) {
>>> Folder f = session.getRootFolder();
>>>
>>> response.setStatus(HttpServletResponse.SC_OK);
>>> response.getOutputStream().write(f.getName().getBytes("UTF-8"));
>>> }
>>> }
>>>
>>> private static Map<String, String> getProps() {
>>> String wsdl =
>>> "http://10.177.101.190:9080/alfresco/cmisws/RepositoryService?wsdl";
>>>
>>> Map<String, String> properties = new HashMap<String, String>();
>>> properties.put(SessionParameter.BINDING_TYPE,
>>> BindingType.WEBSERVICES.value());
>>> properties.put(SessionParameter.WEBSERVICES_ACL_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_POLICY_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, wsdl);
>>>
>>> String username = "xxx";
>>> String password = "yyy";
>>>
>>> properties.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS,
>>> CmisBindingFactory.STANDARD_AUTHENTICATION_PROVIDER);
>>>
>>> properties.put(SessionParameter.USER, username);
>>> properties.put(SessionParameter.PASSWORD, password);
>>>
>>> Authenticator.setDefault(new BasicAuthenticator(username, password));
>>>
>>> return properties;
>>> }
>>>
>>> static class BasicAuthenticator extends Authenticator
>>> {
>>> private PasswordAuthentication passwordAuthentication;
>>>
>>> public BasicAuthenticator(String user, String password)
>>> {
>>> passwordAuthentication = new PasswordAuthentication(user,
>>> password.toCharArray());
>>> }
>>>
>>> @Override
>>> protected synchronized PasswordAuthentication
>>> getPasswordAuthentication()
>>> {
>>> return passwordAuthentication;
>>> }
>>> }
>>> }
>>>
>>> and this standalone succeeds
>>>
>>> import java.net.Authenticator;
>>> import java.net.PasswordAuthentication;
>>> import java.util.HashMap;
>>> import java.util.List;
>>> import java.util.Map;
>>>
>>> import org.apache.chemistry.opencmis.client.api.Folder;
>>> import org.apache.chemistry.opencmis.client.api.Repository;
>>> import org.apache.chemistry.opencmis.client.api.Session;
>>> import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;
>>> import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
>>> import org.apache.chemistry.opencmis.commons.SessionParameter;
>>> import org.apache.chemistry.opencmis.commons.enums.BindingType;
>>>
>>>
>>> public class Al {
>>>
>>> public static void main(String[] args) {
>>>
>>> Map<String, String> props = getProps();
>>>
>>> List<Repository> repositories =
>>> SessionFactoryImpl.newInstance().getRepositories(props);
>>>
>>> Repository repository = null;
>>> for (Repository rep : repositories) {
>>> if (rep.getName().equalsIgnoreCase("Main Repository")) {
>>> repository = rep;
>>> break;
>>> }
>>> }
>>>
>>> if (repository != null) {
>>> Session session = repository.createSession();
>>>
>>> Folder f = session.getRootFolder();
>>> System.out.println(f.getName());
>>> }
>>> }
>>>
>>> private static Map<String, String> getProps() {
>>> String wsdl =
>>> "http://10.177.101.190:9080/alfresco/cmisws/RepositoryService?wsdl";
>>>
>>> Map<String, String> properties = new HashMap<String, String>();
>>> properties.put(SessionParameter.BINDING_TYPE,
>>> BindingType.WEBSERVICES.value());
>>> properties.put(SessionParameter.WEBSERVICES_ACL_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_POLICY_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, wsdl);
>>> properties.put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, wsdl);
>>>
>>> String username = "xxx";
>>> String password = "yyy";
>>>
>>> properties.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS,
>>> CmisBindingFactory.STANDARD_AUTHENTICATION_PROVIDER);
>>>
>>> properties.put(SessionParameter.USER, username);
>>> properties.put(SessionParameter.PASSWORD, password);
>>>
>>> Authenticator.setDefault(new BasicAuthenticator(username, password));
>>>
>>> return properties;
>>> }
>>>
>>> }
>>>
>>> class BasicAuthenticator extends Authenticator
>>> {
>>> private PasswordAuthentication passwordAuthentication;
>>>
>>> public BasicAuthenticator(String user, String password)
>>> {
>>> passwordAuthentication = new PasswordAuthentication(user,
>>> password.toCharArray());
>>> }
>>>
>>> @Override
>>> protected synchronized PasswordAuthentication getPasswordAuthentication()
>>> {
>>> return passwordAuthentication;
>>> }
>>> }
>>>
>>>
>>> i even added <prefer-application-packages> like the following to try
>>> to use my copies of the jars in weblogic-application.xml
>>>
>>> <prefer-application-packages>
>>> <package-name>org.apache.chemistry.*</package-name>
>>> <package-name>com.glassfish.gmbal.*</package-name>
>>> <package-name>com.sun.istack.*</package-name>
>>> <package-name>com.sun.xml.stream.*</package-name>
>>> <package-name>com.sun.xml.ws.*</package-name>
>>> <package-name>com.sun.xml.bind.*</package-name>
>>> <package-name>com.sun.xml.txw2.*</package-name>
>>> <package-name>org.jvnet.*</package-name>
>>> <package-name>javax.xml.bind.*</package-name>
>>> <package-name>javax.xml.ws.*</package-name>
>>> </prefer-application-packages>
>>>
>>>
>>>
>>>
>>>
>>> ---
>>> <br type="_moz" />
>>>
>>> On 2014-02-20 14:10, Dave Brosius wrote:
>>>> I'm using
>>>>
>>>> Alfresco Community v4.0.0
>>>> (4003) schema 5025
>>>>
>>>> The web service url is
>>>>
>>>> http://some.local.host.com:9080/alfresco/cmisws/RepositoryService?wsdl
>>>>
>>>>
>>>> I decided to build a standalone app that just tested that one thing,
>>>> so it would be easier to test (the real thing is part of a web app on
>>>> weblogic)
>>>>
>>>> It works fine in the standalone app. I'm now thinking that it's a
>>>> quiet jar conflict, as i had to download a bunch of jars that
>>>> apparently
>>>> wls was providing.
>>>>
>>>> I'm going to stuff all the jars i downloaded into WEB-INF/lib and see
>>>> what happens.
>>>>
>>>> ---
>>>> <br type="_moz" />
>>>>
>>>> On 2014-02-20 11:56, Florian Müller wrote:
>>>>> Hi Dave,
>>>>>
>>>>> Looks like the transferred XML is somehow corrupt. All properties
>>>>> became extensions.
>>>>> Would it be possible to capture the response from the Alfresco server?
>>>>> Which Alfresco version are you connection to and which Alfresco CMIS
>>>>> URL did you use?
>>>>>
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Florian
>>>>>
>>>>>
>>>>>
>>>>>> Greetings,
>>>>>>
>>>>>> I am running into a NPE trying to get the root folder from an
>>>>>> Alfresco cmis thru chemistry 0.10.0.
>>>>>>
>>>>>> I'm assuming that there is some sort of configuration missing on
my
>>>>>> part, but i'm not sure how to debug further.
>>>>>>
>>>>>> Basically, when calling Session.getRootFolder it gets to
>>>>>>
>>>>>> SessionImpl getObject(ObjectId objectId, OperationContext context);
>>>>>>
>>>>>> where it fetches ObjectData, that looks like this:
>>>>>>
>>>>>> Object Data [properties=Properties Data
>>>>>>
>>>>>> [properties=[]][extensions=[{http://docs.oasis-open.org/ns/cmis/core/200908/}propertyId
>>>>>> {null=cmis:allowedChildObjectTypeIds}: ,
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyId
>>>>>> {null=cmis:objectTypeId}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}:
>>>>>> cmis:folder],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyString
>>>>>> {null=cmis:path}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}: /],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyString
>>>>>> {null=cmis:name}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}: Company
>>>>>> Home],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyDateTime
>>>>>> {null=cmis:creationDate}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}:
>>>>>> 2013-11-18T19:22:26.382+05:30],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyString
>>>>>> {null=cmis:changeToken}: ,
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyString
>>>>>> {null=cmis:lastModifiedBy}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}: System],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyString
>>>>>> {null=cmis:createdBy}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}: System],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyId
>>>>>> {null=cmis:objectId}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}:
>>>>>> workspace://SpacesStore/03ceb69e-5168-4f1c-a3b4-64cbb2ad4bf7],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyId
>>>>>> {null=cmis:baseTypeId}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}:
>>>>>> cmis:folder],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyId
>>>>>> {null=alfcmis:nodeRef}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}:
>>>>>> workspace://SpacesStore/03ceb69e-5168-4f1c-a3b4-64cbb2ad4bf7],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyDateTime
>>>>>> {null=cmis:lastModificationDate}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}:
>>>>>> 2013-11-18T19:44:23.898+05:30],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyId
>>>>>> {null=cmis:parentId}: , {http://www.alfresco.org}aspects {}:
>>>>>> [{http://www.alfresco.org}appliedAspects {}: P:app:uifacets,
>>>>>> {http://www.alfresco.org}properties {}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}propertyString
>>>>>> {propertyDefinitionId=app:icon}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}:
>>>>>> space-icon-default],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyString
>>>>>> {propertyDefinitionId=cm:description}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}: The
>>>>>> company root space],
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyString
>>>>>> {propertyDefinitionId=cmis:policyText}: ,
>>>>>> {http://docs.oasis-open.org/ns/cmis/core/200908/}propertyString
>>>>>> {propertyDefinitionId=cm:title}:
>>>>>> [{http://docs.oasis-open.org/ns/cmis/core/200908/}value {}: Company
>>>>>> Home]], {http://www.alfresco.org}appliedAspects {}: P:cm:titled,
>>>>>> {http://www.alfresco.org}appliedAspects {}: P:sys:localized]]],
>>>>>> allowable
>>>>>> actions=Allowable Actions [allowable actions=[CAN_UPDATE_PROPERTIES,
>>>>>> CAN_GET_FOLDER_TREE, CAN_GET_PROPERTIES, CAN_GET_OBJECT_RELATIONSHIPS,
>>>>>> CAN_GET_DESCENDANTS, CAN_GET_APPLIED_POLICIES, CAN_GET_CHILDREN,
>>>>>> CAN_CREATE_DOCUMENT, CAN_CREATE_FOLDER, CAN_CREATE_RELATIONSHIP,
>>>>>> CAN_GET_ACL, CAN_APPLY_ACL]][extensions=null], change event info=null,
>>>>>> ACL=null, is exact ACL=null, policy ids=null, relationships=[],
>>>>>> renditions=[]][extensions=null]
>>>>>>
>>>>>> It then switches on the objectData's baseTypeId
>>>>>>
>>>>>> which uses the entry in the properties.properties object as
>>>>>>
>>>>>> PropertyData<?> property =
>>>>>> properties.getProperties().get("cmis:baseTypeId");
>>>>>>
>>>>>> but as you can see above the properties.properties collection is
empty.
>>>>>>
>>>>>> since the value returned is null, the switch NPEs on me.
>>>>>>
>>>>>> So i'm not sure why the properties.properties collection is empty.
>>>>>>
>>>>>> Any help would be greatly appreciated.
>>>>>>
>>>>>> dave
 
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message