cancel
Showing results for 
Search instead for 
Did you mean: 

Invalid reposiroty id - CMIS using webservice

nikes
Champ on-the-rise
Champ on-the-rise
Dear all,

I am using follow java program to access Alfresco using CMIS Webservice API


import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.message.SOAPHeaderElement;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.ws.security.message.token.UsernameToken;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.message.WSSecHeader;
import org.apache.ws.security.util.WSSecurityUtil;
import org.w3c.dom.Document;
import org.apache.ws.security.message.token.Timestamp;

public class CMISTest {
public static void main(String [] args) {
try {

String endpoint = "http://localhost:8080/alfresco/cmis/RepositoryService";

String repID = "46f8b242-9f61-423b-b824-c6118f470f01";

Service serv = new Service();
Call call = (Call) serv.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName(new QName("http://www.cmis.org/2008/05", "getTypeChildren"));
call.addParameter( "id",new QName("http://www.w3.org/2001/XMLSchema','string"),ParameterMode.IN);
call.setReturnType( new QName("http://www.w3.org/2001/XMLSchema','string"));
//call.setUsername("admin");
//call.setPassword("admin");

SOAPEnvelope se = new SOAPEnvelope(); // dummy envelope to create Header
Document doc = se.getAsDocument();

WSSecHeader secHeader = new WSSecHeader();
secHeader.setMustUnderstand(true);
secHeader.insertSecurityHeader(doc);

UsernameToken username = new UsernameToken(Boolean.TRUE,doc,WSConstants.PASSWORD_TEXT);
username.setName("admin");
username.setPassword("admin");

Timestamp ts = new Timestamp(true, doc,900000);

WSSecurityUtil.prependChildElement(doc, secHeader.getSecurityHeader(), username.getElement(), true);
WSSecurityUtil.prependChildElement(doc, secHeader.getSecurityHeader(), ts.getElement(), true);

SOAPHeaderElement she = new SOAPHeaderElement(secHeader.getSecurityHeader());
call.addHeader(she);

String ret = (String) call.invoke(new Object[] {repID});
System.out.println(ret);

} catch (Exception e) {
e.printStackTrace();
}
}
}


It compiles well but when I execute it throws following exception for repository ID even though I am supplying
proper repository id.


Error:

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server
faultSubcode:
faultString: Invalid repository id
faultActor:
faultNode:
faultDetail:
        {http://docs.oasis-open.org/ns/cmis/messaging/200908/}cmisFault:<type>i
validArgument</type>0<message>Invalid repository id</message>

Invalid repository id
        at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilde
.java:222)
        at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder
java:129)
        at org.apache.axis.encoding.DeserializationContext.endElement(Deseriali
ationContext.java:1087)
        at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Sourc
)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unkno
n Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentConten
Dispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(U
known Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Sou
ce)
        at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
        at org.apache.axis.encoding.DeserializationContext.parse(Deserializatio
Context.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(MustUnder
tandChecker.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 CMISTest.main(CMISTest.java:50)


Any help would be appreciated.
9 REPLIES 9

rostio
Champ in-the-making
Champ in-the-making
Hello Nikes,

i have exactly the same problem.
If you have an answer, please post it.

thx, rostio

nikes
Champ on-the-rise
Champ on-the-rise
Hi rostio,

I got the resolution for the code.
Problem is in serialization/deserialization part.
We can do two things,
1) In your client code handle deseralization type mapping manually
2) Use latest wsdl2java to generate client stub classes and use stub classes to call methods, so no need to handle serialization/deserialization part.

For reference refer below code (approach 1).


package CMIS;

import java.net.MalformedURLException;
import java.rmi.RemoteException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.description.OperationDesc;
import org.apache.axis.description.ParameterDesc;
import org.apache.axis.encoding.ser.ArrayDeserializerFactory;
import org.apache.axis.encoding.ser.ArraySerializerFactory;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;

import org.apache.axis.message.SOAPHeader;
import org.apache.axis.message.SOAPHeaderElement;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.ws.security.message.token.UsernameToken;

import org.apache.ws.security.WSConstants;
import org.apache.ws.security.message.WSSecHeader;
import org.apache.ws.security.util.WSSecurityUtil;
import org.oasis_open.docs.ns.cmis.messaging._200908.CmisRepositoryEntryType;
import org.w3c.dom.Document;
import org.apache.ws.security.message.token.Timestamp;



public class CMISTest {
public static void main(String [] args) {
try {

   String endpoint = "http://localhost:8080/alfresco/cmis/RepositoryService";
   
   Service serv = new Service();

   Call call = null;
   try {
      call = (Call) serv.createCall();

      call.setTargetEndpointAddress(new java.net.URL(endpoint));
   } catch (ServiceException e) {
      System.err.println("Servic call create error");
   } catch (MalformedURLException e) {
      System.err.println("Malformed url");
   }

   
      ParameterDesc param;
        OperationDesc oper = new OperationDesc();
        oper.setName("getRepositories");
        param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("http://docs.oasis-open.org/ns/cmis/messaging/200908/", "getRepositories"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://docs.oasis-open.org/ns/cmis/messaging/200908/", ">getRepositories"));
       
        oper.addParameter(param);
        oper.setReturnType(new javax.xml.namespace.QName("http://docs.oasis-open.org/ns/cmis/messaging/200908/", ">getRepositoriesResponse"));
        oper.setReturnClass(CmisRepositoryEntryType[].class);
        oper.setReturnQName(new javax.xml.namespace.QName("http://docs.oasis-open.org/ns/cmis/messaging/200908/", "getRepositoriesResponse"));
       
        param = oper.getReturnParamDesc();
        param.setItemQName(new javax.xml.namespace.QName("http://docs.oasis-open.org/ns/cmis/messaging/200908/", "repositories"));
        oper.setStyle(org.apache.axis.constants.Style.DOCUMENT);
        oper.setUse(org.apache.axis.constants.Use.LITERAL);

        call.setOperationName(new javax.xml.namespace.QName("", "getRepositories"));
        call.setOperation(oper);

        QName qName = new QName("http://docs.oasis-open.org/ns/cmis/messaging/200908/", ">getRepositoriesResponse");
        call.registerTypeMapping(CmisRepositoryEntryType[].class, qName, ArraySerializerFactory.class, ArrayDeserializerFactory.class);

        qName = new javax.xml.namespace.QName("http://docs.oasis-open.org/ns/cmis/messaging/200908/", "cmisRepositoryEntryType");
        call.registerTypeMapping(CmisRepositoryEntryType.class, qName, BeanSerializerFactory.class, BeanDeserializerFactory.class);

   SOAPEnvelope se = new SOAPEnvelope(); // dummy envelope to create Header
   Document doc = null;
   try {
      doc = se.getAsDocument();
   } catch (Exception e) {
      System.err.println("Exception caught while getting the doc");
   }

   WSSecHeader secHeader = new WSSecHeader();
   secHeader.setMustUnderstand(true);
   secHeader.insertSecurityHeader(doc);

   UsernameToken username = new UsernameToken(Boolean.TRUE, doc,
         WSConstants.PASSWORD_TEXT);
   username.setName("admin");
   username.setPassword("admin");
   Timestamp ts = new Timestamp(true, doc, 300);

   WSSecurityUtil.prependChildElement(doc, secHeader.getSecurityHeader(),
         username.getElement(), false);
   WSSecurityUtil.prependChildElement(doc, secHeader.getSecurityHeader(),
         ts.getElement(), false);



   SOAPHeaderElement she = new SOAPHeaderElement(secHeader.getSecurityHeader());
   call.addHeader(she);

   try {
      
      CmisRepositoryEntryType[] ret = null;
        try
        {
            ret = (CmisRepositoryEntryType[]) call.invoke(new Object[] { null });

        }
        catch (Exception e)
        {
            System.out.println("Inside remote");
            System.err.println("Remote exception : " + e.getMessage());
        }

        for (CmisRepositoryEntryType repository : ret)
        {
            System.out.println("Repository [Name=" + repository.getRepositoryName() + ", id=" + repository.getRepositoryId() + "]");
        }
      
   } catch (Exception e) {
      System.out.println("Inside remote");
      System.err.println("Remote exception : " + e.getMessage());
   }
   
} catch (Exception e) {
e.printStackTrace();
}
}
}


Hope this helps.

rameshbelli
Champ in-the-making
Champ in-the-making
Hi Nikes,

First you have to call the getRepositories() method in the RepositoryService to get the repositoryId.

Then call the getTypeChildren passing the repositoryId.

You can also call the getRepositoryInfo(repositoryId) method  to get the rootFolderId and other Repository Information.

Hope this  helps,

Ramesh

rostio
Champ in-the-making
Champ in-the-making
Hi Nikes,

thx for your answer. unfortunately i can't compile the code because of the term

import org.oasis_open.docs.ns.cmis.messaging._200908.CmisRepositoryEntryType;

i don't find the jar file to this class. Can you please tell me where to find it?

thx, rostio

nikes
Champ on-the-rise
Champ on-the-rise
Hi rostio,

U need to generate client side stub classes from wsdl file (use wsdl2java tool).
It will generate all required classes.

Well now I have moved to use Apache Axis2 client rather than older version of Axis.
Axi2 gives more flexibility in choosing data binding like ADB, JiXB, XMLBeans.

With Axis2 I am able to execute all services.

Tell me if you need any further info.

Hope this helps.

rostio
Champ in-the-making
Champ in-the-making
Hi Nikes,

how can i generate client side stub classes from wsdl file. is there a tutorial?  And this will generate classes like the class CmisRepositoryEntryType from org.oasis?

thx for your help!

nikes
Champ on-the-rise
Champ on-the-rise
Do following to setup Axis2 environment.

Axis2 -axis2-1.5.1-bin
Rampart version (for wss security settings)  - rampart-dist-1.5-bin
Java Version - 1.6
Alfresco 3.2r2 community

U need to set your AXIS2_HOME environment variable and path variable to point to lib files.

Following is security configuration file  "client.axis2.xml", put it in path given in sample code below.

<!–
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  –>

<axisconfig name="AxisJava2.0">
    <module ref="rampart" />
   
    <parameter name="OutflowSecurity">
      <action>
        <items>UsernameToken Timestamp</items>
        <user>admin</user>
        <passwordCallbackClass>cmis.PWCBHandler</passwordCallbackClass>
        <passwordType>PasswordText</passwordType>
      </action>
    </parameter>

    <!– ================================================= –>
    <!– Parameters –>
    <!– ================================================= –>
    <parameter name="hotdeployment">true</parameter>
    <parameter name="hotupdate">false</parameter>
    <parameter name="enableMTOM">false</parameter>
    <parameter name="enableSwA">false</parameter>

    <!–Uncomment if you want to enable file caching for attachments –>
    <!–parameter name="cacheAttachments">true</parameter>
    <parameter name="attachmentDIR"></parameter>
    <parameter name="sizeThreshold">4000</parameter–>

    <!–Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions –>
    <!–In some server environments, the available memory heap is limited and can fill up under load –>
    <!–Since in-memory copies of WSDL definitions can be large, some steps can be taken–>
    <!–to reduce the memory needed for the cached WSDL definitions. –>
    <!–parameter name="reduceWSDLMemoryCache">true</parameter–>
                                                      
    <!–This will give out the timout of the configuration contexts, in milliseconds–>
    <parameter name="ConfigContextTimeoutInterval">30000</parameter>

    <!–During a fault, stack trace can be sent with the fault message. The following flag will control –>
    <!–that behavior.–>
    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>

    <!–If there aren't any information available to find out the fault reason, we set the message of the exception–>
    <!–as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be –>
    <!–wrapped by different levels. Due to this the initial exception message can be lost. If this flag–>
    <!–is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.–>
    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>

    <parameter name="userName">admin</parameter>
    <parameter name="password">axis2</parameter>

    <!–To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.–>
    <!–ServicesDirectory only works on the following cases–>
    <!—File based configurator and in that case the value should be a file URL (http:// not allowed)–>
    <!—When creating URL Based configurator with URL “file://”  –>
    <!— War based configurator with expanded case , –>

    <!–All the other scenarios it will be ignored.–>
    <!–<parameter name="ServicesDirectory">service</parameter>–>
    <!–To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path–>
    <!–<parameter name="ModulesDirectory">modules</parameter>–>



    <!–Following params will set the proper context paths for invocations. All the endpoints will have a commons context–>
    <!–root which can configured using the following contextRoot parameter–>
    <!–<parameter name="contextRoot">axis2</parameter>–>

    <!–Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints–>
    <!–In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this –>
    <!–context path to proper Axis2 servlets–>
    <!–<parameter name="servicePath">services</parameter>–>
    <!–<parameter name="restPath">rest</parameter>–>

    <!– Following parameter will completely disable REST handling in Axis2–>
    <parameter name="disableREST" locked="true">false</parameter>
   
    <!– Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files –>
    <parameter name="disableSOAP12" locked="true">false</parameter>

    <!–POJO deployer , this will alow users to drop .class file and make that into a service–>
    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
    <!–<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>–>
   

    <!– Following parameter will set the host name for the epr–>
    <!–<parameter name="hostname" locked="true">myhost.com</parameter>–>

    <!– If you have a front end host which exposes this webservice using a different public URL  –>
    <!– use this parameter to override autodetected url –>
    <!–<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>–>


    <!–    The way of adding listener to the system–>
    <!–    <listener class="org.apache.axis2.ObserverIMPL">–>
    <!–        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>–>
    <!–    </listener>–>

    <!– ================================================= –>
    <!– Message Receivers –>
    <!– ================================================= –>
    <!–This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for –>
    <!–all the other MEP implement it and add the correct entry to here , so that you can refer from–>
    <!–any operation –>
    <!–Note : You can ovrride this for a particular service by adding the same element with your requirement–>
     <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
    </messageReceivers>

    <!– ================================================= –>
    <!– Message Formatter –>
    <!– ================================================= –>
    <!–Following content type to message formatter mapping can be used to implement support for different message –>
    <!–format  serialization in Axis2. These message formats are expected to be resolved based on the content type. –>
    <messageFormatters>
        <messageFormatter contentType="application/x-www-form-urlencoded"
                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
        <messageFormatter contentType="multipart/form-data"
                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
        <messageFormatter contentType="application/xml"
                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
        <messageFormatter contentType="text/xml"
                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
        <messageFormatter contentType="application/soap+xml"
                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
    </messageFormatters>

    <!– ================================================= –>
    <!– Message Builders –>
    <!– ================================================= –>
    <!–Following content type to builder mapping can be used to implement support for different message –>
    <!–formats in Axis2. These message formats are expected to be resolved based on the content type. –>
    <messageBuilders>
        <messageBuilder contentType="application/xml"
                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
        <messageBuilder contentType="application/xml"
                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
        <messageBuilder contentType="application/x-www-form-urlencoded"
                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
        <messageBuilder contentType="multipart/form-data"
                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
    </messageBuilders>

    <!– ================================================= –>
    <!– Transport Ins –>
    <!– ================================================= –>
    <transportReceiver name="http"
                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
        <parameter name="port">8080</parameter>
        <!– Here is the complete list of supported parameters (see example settings further below):
            port: the port to listen on (default 6060)
            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
                                false to minimize bandwidth consumption by combining segments
            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
                                       note that default queue never fills up:  see HttpFactory
            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
                                  note that no such threads can exist with default unbounded request queue
            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
        –>
        <!– <parameter name="hostname">http://www.myApp.com/ws</parameter> –>
        <!– <parameter name="originServer">My-Server/1.1</parameter>           –>
        <!– <parameter name="requestTimeout">10000</parameter>                   –>
        <!– <parameter name="requestTcpNoDelay">false</parameter>                   –>
        <!– <parameter name="requestCoreThreadPoolSize">50</parameter>                      –>
        <!– <parameter name="RequestMaxThreadPoolSize">100</parameter>                     –>
        <!– <parameter name="threadKeepAliveTime">240000</parameter>                  –>
        <!– <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            –>
    </transportReceiver>

    <!–Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
        <parameter name="myTopicConnectionFactory">
            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
        </parameter>

        <parameter name="myQueueConnectionFactory">
            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
        </parameter>

        <parameter name="default">
            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
        </parameter>
    </transportReceiver>–>

    <!– ================================================= –>
    <!– Non-blocking http/s Transport Listener  –>

    <!– the non blocking http transport based on HttpCore + NIO extensions
    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
        <parameter name="port" locked="false">9000</parameter>
        <parameter name="non-blocking" locked="false">true</parameter>
    </transportReceiver>–>

    <!– the non blocking https transport based on HttpCore + SSL-NIO extensions
    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
        <parameter name="port" locked="false">9002</parameter>
        <parameter name="non-blocking" locked="false">true</parameter>
        <parameter name="keystore" locked="false">
            <KeyStore>
                <Location>identity.jks</Location>
                <Type>JKS</Type>
                <Password>password</Password>
                <KeyPassword>password</KeyPassword>
            </KeyStore>
        </parameter>
        <parameter name="truststore" locked="false">
            <TrustStore>
                <Location>trust.jks</Location>
                <Type>JKS</Type>
                <Password>password</Password>
            </TrustStore>
        </parameter>–>
        <!–<parameter name="SSLVerifyClient">require</parameter>
            supports optional|require or defaults to none –>
    <!–</transportReceiver>–>

    <!– ================================================= –>
    <!– Mail Transport Listener  –>
    <!– This is a sample configuration. It assumes a mail server running in localhost.
         Listener pops  messages that comes to the email address red@localhost. Users
         password is red. Listener connect to the server every 3000 milliseconds.
         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API.
         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
     –>
    <!– ================================================= –>
    <!–<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
        <parameter name="mail.pop3.host">localhost</parameter>
        <parameter name="mail.pop3.user">red</parameter>
        <parameter name="mail.store.protocol">pop3</parameter>
        <parameter name="transport.mail.pop3.password">red</parameter>
        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
        <parameter name="transport.listener.interval">3000</parameter>
    </transportReceiver>–>

    <!–Uncomment if you want to have TCP transport support–>
    <!–transportReceiver name="tcp"
                       class="org.apache.axis2.transport.tcp.TCPServer">
        <parameter name="port">6060</parameter–>>
        <!–If you want to give your own host address for EPR generation–>
        <!–uncomment the following paramter , and set it as you required.–>
        <!–<parameter name="hostname">tcp://myApp.com/ws</parameter>–>
    <!– /transportReceiver –>

    <!– ================================================= –>
    <!– Transport Outs –>
    <!– ================================================= –>

    <!– transportSender name="tcp"
                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
    <transportSender name="local"
                     class="org.apache.axis2.transport.local.LocalTransportSender"/ –>
    <transportSender name="http"
                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
        <parameter name="PROTOCOL">HTTP/1.1</parameter>
        <parameter name="Transfer-Encoding">chunked</parameter>

        <!– If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages –>
        <!–  <parameter name="OmitSOAP12Action">true</parameter>  –>
    </transportSender>

    <transportSender name="https"
                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
        <parameter name="PROTOCOL">HTTP/1.1</parameter>
        <parameter name="Transfer-Encoding">chunked</parameter>
    </transportSender>
    <transportSender name="java"
                     class="org.apache.axis2.transport.java.JavaTransportSender"/>

    <!–<transportSender name="jms"–>
                     <!–class="org.apache.axis2.transport.jms.JMSSender"/>–>

    <!– ================================================= –>
    <!– Non-blocking http/s Transport Sender  –>

    <!– the non-blocking http transport sender based on HttpCore + NIO extensions
    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
        <parameter name="non-blocking" locked="false">true</parameter>
    </transportSender>–>

    <!– the non-blocking https transport sender based on HttpCore + NIO SSL extensions
    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
        <parameter name="non-blocking" locked="false">true</parameter>
        <parameter name="keystore" locked="false">
            <KeyStore>
                <Location>identity.jks</Location>
                <Type>JKS</Type>
                <Password>password</Password>
                <KeyPassword>password</KeyPassword>
            </KeyStore>
        </parameter>
        <parameter name="truststore" locked="false">
            <TrustStore>
                <Location>trust.jks</Location>
                <Type>JKS</Type>
                <Password>password</Password>
            </TrustStore>
        </parameter>–>
        <!–<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified –>
    <!–</transportSender>–>

    <!– ================================================= –>
    <!– Mail Transport Sender  –>
    <!–Only need to uncomment the sender. Configuration is achieved with every client.
        At any instant mail host should be given. Sample configuration has been given.
        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
   –>
    <!– ================================================= –>
   <!–<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
        <parameter name="mail.smtp.host">localhost</parameter>
    </transportSender>–>

    <!– ================================================= –>
    <!– Global Modules  –>
    <!– ================================================= –>
    <!– Comment this to disable Addressing –>
    <module ref="addressing"/>

    <!–Configuring module , providing parameters for modules whether they refer or not–>
    <!–<moduleConfig name="addressing">–>
    <!–<parameter name="addressingPara">N/A</parameter>–>
    <!–</moduleConfig>–>

    <!– ================================================= –>
    <!– Clustering  –>
    <!– ================================================= –>
    <!– Configure and uncomment following for preparing Axis2 to a clustered environment –>
    <!–
    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
        <parameter name="param1">value1</parameter>
        <parameter name="domain">apache.axis2.domain</parameter>
        <parameter name="synchronizeAll">true</parameter>
        <parameter name="maxRetries">10</parameter>
        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
        </configurationManager>
        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
        </contextManager>
    </cluster>
    –>

    <!– ================================================= –>
    <!– Phases  –>
    <!– ================================================= –>
    <phaseOrder type="InFlow">
        <!–  System predefined phases       –>
        <phase name="Transport">
            <handler name="RequestURIBasedDispatcher"
                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
                <order phase="Transport"/>
            </handler>
            <handler name="SOAPActionBasedDispatcher"
                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
                <order phase="Transport"/>
            </handler>
        </phase>
        <phase name="Addressing">
             <handler name="AddressingBasedDispatcher"
                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
                 <order phase="Addressing"/>
            </handler>
        </phase>
        <phase name="Security"/>
        <phase name="PreDispatch"/>
        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
            <handler name="RequestURIBasedDispatcher"
                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
            <handler name="SOAPActionBasedDispatcher"
                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
            <handler name="RequestURIOperationDispatcher"
                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
            <handler name="SOAPMessageBodyBasedDispatcher"
                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>

            <handler name="HTTPLocationBasedDispatcher"
                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
        </phase>
        <phase name="RMPhase"/>
        <!–  System predefined phases       –>
        <!–   After Postdispatch phase module author or service author can add any phase he want      –>
        <phase name="OperationInPhase"/>
        <phase name="soapmonitorPhase"/>
    </phaseOrder>
    <phaseOrder type="OutFlow">
        <!–      user can add his own phases to this area  –>
        <phase name="soapmonitorPhase"/>
        <phase name="OperationOutPhase"/>
        <!–system predefined phase–>
        <!–these phase will run irrespective of the service–>
        <phase name="RMPhase"/>
        <phase name="PolicyDetermination"/>
        <phase name="MessageOut"/>
        <phase name="Security"/>
    </phaseOrder>
    <phaseOrder type="InFaultFlow">
        <phase name="Addressing">
             <handler name="AddressingBasedDispatcher"
                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
                 <order phase="Addressing"/>
            </handler>
        </phase>
        <phase name="Security"/>
        <phase name="PreDispatch"/>
        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
            <handler name="RequestURIBasedDispatcher"
                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
            <handler name="SOAPActionBasedDispatcher"
                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
            <handler name="RequestURIOperationDispatcher"
                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
            <handler name="SOAPMessageBodyBasedDispatcher"
                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>

            <handler name="HTTPLocationBasedDispatcher"
                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
        </phase>
        <phase name="RMPhase"/>
        <!–      user can add his own phases to this area  –>
        <phase name="OperationInFaultPhase"/>
        <phase name="soapmonitorPhase"/>
    </phaseOrder>
    <phaseOrder type="OutFaultFlow">
        <!–      user can add his own phases to this area  –>
        <phase name="soapmonitorPhase"/>
        <phase name="OperationOutFaultPhase"/>
        <phase name="RMPhase"/>
        <phase name="PolicyDetermination"/>
        <phase name="MessageOut"/>
        <phase name="Security"/>
    </phaseOrder>
</axisconfig>

Your axis2 binary distribution comes with wsdl2java tool, so just go to command prompt and
generate stub classes using any option you want. (I have used ADB binding)


D:\wsdl2java -uri http://AlfrescoServer:8080/alfresco/cmis/NavigationService?wsdl -u -d adb

To give you a start following code retrievesfolders info.

/*
* Copyright 2004,2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package cmis;

import java.math.BigInteger;
import java.util.Iterator;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMText;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.databinding.types.xsd.QName;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisExtensionType;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisObjectInFolderContainerType;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisObjectInFolderType;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisObjectType;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisPropertiesType;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisPropertiesTypeChoice_type0;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisPropertyString;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.EnumIncludeRelationships;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.GetFolderTree;


import com.sun.org.apache.bcel.internal.Constants;

public class NavigationClient {
   
    public static void main(String[] args) throws Exception
    {
  
        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem("D:\\Softwares\\axis2-1.5.1-bin\\axis2-1.5.1\\repository","D:\\Softwares\\axis2-1.5.1-bin\\axis2-1.5.1\\repository\\modules\\client.axis2.xml");
        
        NavigationServiceStub stub = new NavigationServiceStub(ctx, "http://localhost:8080/alfresco/cmis/NavigationService");
       
        GetFolderTree ft = new NavigationServiceStub.GetFolderTree();
        ft.setRepositoryId("46f8b242-9f61-423b-b824-c6118f470f01");
        ft.setFolderId("workspace://SpacesStore/0fceb8de-fe45-439a-9ac4-30b32c7671e0");
        ft.setDepth(BigInteger.TEN);
        ft.setFilter("*");
        ft.setRenditionFilter("*");
        ft.setIncludeRelationships(EnumIncludeRelationships.source);
        CmisExtensionType et = new CmisExtensionType();
        ft.setExtension(et);
       
        NavigationServiceStub.GetFolderTreeResponse res = stub.getFolderTree(ft);
       
        CmisObjectInFolderContainerType[] fc =  res.getObjects();
        System.out.println("Total Folders : " + fc.length);
        System.out.println("————————————————–");
        for(int i=0;i<fc.length;i++)
        {
           CmisObjectInFolderType of = fc[i].getObjectInFolder();
           CmisObjectType ot = of.getObject();
           CmisPropertiesType pt = ot.getProperties();
           
           OMElement[] oe = pt.getExtraElement();
       
           for(int j=0;j<oe.length;j++)
           {
              Iterator ii = oe[j].getChildren();
           
              Iterator fitr = oe[j].getAllAttributes();
              while(fitr.hasNext())
              {
                 OMAttribute oat = (OMAttribute)fitr.next();
                 System.out.println(oat.getAttributeValue());
                 //if(oat.getAttributeValue().equalsIgnoreCase("cmis:objectId"))
                 //{
                    while (ii.hasNext())
                      {
                           OMElement oa = (OMElement)ii.next();
                        
                           Iterator fi = oa.getChildren();
                          
                           while(fi.hasNext())
                           {
                              OMText oot = (OMText)fi.next();
                              System.out.println(" Value : "+oot.getText());
                             
                           }
                      }
                 //}
                 
              }
              
              
           }
           System.out.println("——————————————");
        }
      
   
    }//end main

}//end class

Change your repository id and folder id according to your alfresco setup values.

Give it a try.

rostio
Champ in-the-making
Champ in-the-making
Hi Nikes,

what i have done:

1. download and install:

Axis2 -axis2-1.5.1-bin
Rampart version (for wss security settings) - rampart-dist-1.5-bin
Java Version - 1.6
Alfresco 3.2r2 community

2. environmental variables:
right click on "My Computer" and select "Properties". Click the "Advanced" tab and create the new environmental variables
and set:

set AXIS_HOME=c:\axis2-1.5.1
set AXIS_LIB=%AXIS_HOME%\lib

3. create a file "client.axis2.xml" in "c:\axis2-1.5.1" with the sample code.

4.In the cmd:

C:/axis2-1.5.1\bin> wsdl2java -uri http://localhost:8080/alfresco/cmis/NavigationService?wsdl -u -d adb

answer:
Using AXIS2_HOME: C:\axis2-1.5.1
Using JAVA_HOME: CSmiley Tonguerogramme\Java\jdk1.6.0_18
Retrieving document at 'http://localhost:8080/alfresco/cmis/NavigationService?wsdl'.

5. in eclipse
create project AlfrescoCMIS
create Package cmis
create Class NavigationClient  with the following code

/*
* Copyright 2004,2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package cmis;

import java.math.BigInteger;
import java.util.Iterator;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMText;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.databinding.types.xsd.QName;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisExtensionType;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisObjectInFolderContainerType;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisObjectInFolderType;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisObjectType;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisPropertiesType;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisPropertiesTypeChoice_type0;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.CmisPropertyString;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.EnumIncludeRelationships;
import org.oasis_open.docs.ns.cmis.ws._200908.NavigationServiceStub.GetFolderTree;


import com.sun.org.apache.bcel.internal.Constants;

public class NavigationClient {
  
    public static void main(String[] args) throws Exception
    {
  
        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem("D:\\Softwares\\axis2-1.5.1-bin\\axis2-1.5.1\\repository","D:\\Softwares\\axis2-1.5.1-bin\\axis2-1.5.1\\repository\\modules\\client.axis2.xml");
        
        NavigationServiceStub stub = new NavigationServiceStub(ctx, "http://localhost:8080/alfresco/cmis/NavigationService");
      
        GetFolderTree ft = new NavigationServiceStub.GetFolderTree();
        ft.setRepositoryId("46f8b242-9f61-423b-b824-c6118f470f01");
        ft.setFolderId("workspace://SpacesStore/0fceb8de-fe45-439a-9ac4-30b32c7671e0");
        ft.setDepth(BigInteger.TEN);
        ft.setFilter("*");
        ft.setRenditionFilter("*");
        ft.setIncludeRelationships(EnumIncludeRelationships.source);
        CmisExtensionType et = new CmisExtensionType();
        ft.setExtension(et);
      
        NavigationServiceStub.GetFolderTreeResponse res = stub.getFolderTree(ft);
      
        CmisObjectInFolderContainerType[] fc =  res.getObjects();
        System.out.println("Total Folders : " + fc.length);
        System.out.println("————————————————–");
        for(int i=0;i<fc.length;i++)
        {
           CmisObjectInFolderType of = fc[i].getObjectInFolder();
           CmisObjectType ot = of.getObject();
           CmisPropertiesType pt = ot.getProperties();
          
           OMElement[] oe = pt.getExtraElement();
      
           for(int j=0;j<oe.length;j++)
           {
              Iterator ii = oe[j].getChildren();
          
              Iterator fitr = oe[j].getAllAttributes();
              while(fitr.hasNext())
              {
                 OMAttribute oat = (OMAttribute)fitr.next();
                 System.out.println(oat.getAttributeValue());
                 //if(oat.getAttributeValue().equalsIgnoreCase("cmis:objectId"))
                 //{
                    while (ii.hasNext())
                      {
                           OMElement oa = (OMElement)ii.next();
                       
                           Iterator fi = oa.getChildren();
                          
                           while(fi.hasNext())
                           {
                              OMText oot = (OMText)fi.next();
                              System.out.println(" Value : "+oot.getText());
                            
                           }
                      }
                 //}
                
              }
             
             
           }
           System.out.println("——————————————");
        }
      
  
    }//end main

}//end class

done it, eclipse does not know the path of the libs. Every import is marked red…

I don't know the right way to compile it.

thx for help,
rostio

nikes
Champ on-the-rise
Champ on-the-rise
Hi rostio,

Your axis variable name should be AXIS2_HOME

If you look at code you have to mention your axis2 path for context configuration.
Also replace repository  id and folder id with your systems repository id and folder id.

You will have to add all generated stub classes in your eclipse environment.

Hope this helps.