Skip to end of metadata
Go to start of metadata
Icon

We are developing a new REST API that will replace our existing APIs. We recommend plugin developers use the REST API where possible.

Confluence provides remote APIs in the form of XML-RPC and SOAP interfaces. XML-RPC and SOAP have bindings for almost every language, making them very portable. This document refers to the XML-RPC specification. See SOAP details below

When choosing between SOAP and XML-RPC you should consider the language for your client and how quickly you need to develop it. SOAP is generally more useful from a strongly typed language (like Java or C#) but these require more setup. XML-RPC is easier to use from a scripting language (like Perl, Python, or AppleScript) and is often quicker to use.

On this page:

 

Creating an XML-RPC Client

Note the following points:

  • The URL for XML-RPC requests is http://<hostname>/rpc/xmlrpc
  • All XML-RPC methods must be prefixed by "confluence2." to indicate that this is version 2 of the API. For example to call the getPage method, use confluence2.getPage. There is also a version 1 API available see below.
  • All keys in structs are case sensitive.
  • All strings are decoded according to standard XML document encoding rules. Due to a bug in Confluence versions prior to 2.8, strings sent via XML-RPC are decoded using the JVM platform default encoding (CONF-10213@JIRA) instead of the XML encoding.
  • Confluence uses 64-bit long values for things like object IDs, but XML-RPC's largest supported numeric type is int32. As a result, all IDs and other long values are converted to Strings when passed through XML-RPC API.
  • For any type identified as a Vector, use the type appropriate for your programming language, such as an Array or List. This is equivalent to the array data type as defined in the XML-RPC specification.
  • For any type identified as a Hashtable, use "Struct" or "Dictionary" or "Map", depending on your programming language. This is equivalent to the struct data type as defined in the XML-RPC specification.
  • The default session lifetime is 60 minutes, but the deployer can change this value by editing the web.xml file. This file is located in the following folder: /confluence/WEB-INF/

Creating a SOAP Client

The SOAP API follows the same methods as below, except with typed objects (as SOAP allows for).  To find out more about the SOAP API, simply point your SOAP 'stub generator' at your instance's WSDL file, located at http://<confluence-install>/rpc/soap-axis/confluenceservice-v2?wsdl

For reference, you can also view the WSDL file at http://confluence.atlassian.com.

The Confluence Command Line Interface is a good place to get a functioning client.

Remote API version 1 and version 2

Confluence 4.0 introduced changes to the way page content is stored in Confluence. Page content is no longer stored as wiki markup, but is now stored in an XHTML based storage format. Confluence 4.0 also introduced a new version 2 remote API. The new version 2 API implements the same methods as the version 1 API, however all content is stored and retrieved using the storage format. This means that you cannot, for example, create a page using wiki markup with the version 2 API, you must instead define the page using the storage format. Atlassian recommends that you migrate towards this new API.

The version 1 remote API will continue to work with Confluence 4.0. You will be able to create pages, blogs and comments in wiki markup using the version 1 API. However you will no longer be able to retrive pages, blogs and comments using the version 1 API.

Specifically the following methods no longer work with the version 1 API:

  • getBlogEntryByDayAndTitle(String token, String spaceKey, int dayOfMonth, String postTitle)
  • getBlogEntryByDateAndTitle(String token, String spaceKey, int year, int month, int dayOfMonth, String postTitle)
  • getBlogEntry(String token, long entryId)
  • getPage(String token, String spaceKey, String pageTitle)
  • getPage(String token, long pageId)
  • getComments(String token, long pageId)
  • getComment(String token, long commentId)

You can use both APIs in a client, creating content in wiki markup using the version 1 API and retrieving it in the storage format using the version 2 API. This may be a useful stepping stone for clients to move towards the version 2 API. You should note that there is no longer any way to retrive content from Confluence as wiki markup.

To aid the migration from the version 1 API to the version 2 API a new method convertWikiToStorageFormat(String token, String markup) has been added to both versions of the API.

Script Examples

The Confluence User Community space contains various examples of scripts.

Changelog

The following changes apply to the Remote Confluence Methods and Remote Confluence Data Objects:

Confluence 5.0.3

  • Added the two removePageVersion methods.

Confluence 4.3

  • Added removePageWatch, removeSpacewatch and removePageWatchForUser methods.
  • Added getSpaceStatus and setSpaceStatus for space archiving.

Confluence 4.0

  • Added version 2 of the remote API.
  • Calls to methods that return page content using the version 1 API will now result in an error. Please use the version 2 API instead.
  • Added method for converting wiki markup to storage format: convertWikiToStorageFormat(String token, String markup)

Confluence 3.5

  • Added notification methods: watchPage, watchSpace, watchPageForUser, getWatchersForPage, getWatchersForSpace
  • Added blog post retrieval method: getBlogEntryByDateAndTitle
  • Added space management methods: getTrashContents, purgeFromTrash, emptyTrash.
  • Added data objects: ContentSummaries, ContentSummary.

Confluence 2.10

  • Added updatePage.

Confluence 2.9

  • Search: Removed option 'all' in table of content types and changed the default to 'All'. If you need to search for all types, simply omit the 'type' restriction.
  • Search: Added option 'contributor' to the table of filter options.

Confluence 2.3

  • Added getClusterInformation and getClusterNodeStatuses.

Confluence 2.2

  • Added addPersonalSpace, convertToPersonalSpace and addProfilePicture.

Confluence 2.1.4

  • Added getPermissionsForUser.

Confluence 2.0

  • Updated getLocks() to getPagePermissions()
  • Added addAttachment, getAttachment, getAttachmentData, removeAttachment and moveAttachment methods to allow remote attachment handling. Note that adding large attachments with this API uses a lot of memory during the addAttachment operation.
  • Added addAnonymousPermissionToSpace, addAnonymousPermissionsToSpace and removeAnonymousPermissionFromSpace.
  • Added the addComment and removeComment methods for comment manipulation.
  • Added hasGroup and hasUser methods to determine if a group or user exists.
  • Added editUser method.
  • Added ability to deactivate and reactivate users.
  • Added getActiveUsers method to retrieve a user list.
  • Added ability to change the user password.
  • Added ability to retrieve and modify user information.
  • Added ability to retrieve, add and remove labels.
  • Added getBlogEntryByDayAndTitle

Confluence 1.4

  • Added new exportSpace and exportSite methods to build exports of an individual space or an entire Confluence instance and return with a URL leading to the download.
  • Added new getChildren and getDescendents methods to get the direct children and all descendents of a given page.
  • Added new getAncestors method to get the ancestors of a given page.
  • Removed the old getLocks as locks are superceded by page level permissions.
  • Added new getPagePermissions method to retrieve page level permissions.
  • Added new removeUser, removeGroup, removeAllPermissionsForGroup, addUserToGroup and removeUserFromGroup methods.
  • Added new addPermissionToSpace method.
  • Added new Permission data object.
  • Added new getSpaceLevelPermissions method.

Confluence 1.3

  • Added new getPage method which retrieves a page by space key and page title.
  • Added new removeSpace method to remove an entire space.
  • Added ability to limit search by parameters.
  • Allow anonymous access.

Confluence 1.2

  • renderContent takes an optional hashtable for rendering hints, the only one supported right now is "style=clean"

Confluence 1.1

  • getLocks gives you back a list of any locks that apply to a given page
  • added a locks field to the various Page structs containing a count of any applicable page-level locks
  • CRUD methods added for blog-posts

Confluence 1.0.3

  • getServerInfo gives you some basic information about the server version CONF1123@JIRA
  • storePage now allows you to change the page's name (incoming links are all renamed) CONF-974@JIRA
  • storePage now reliably allows you to re-parent pages
  • WSDL now respects the server's configured base URL, allowing it to work on proxy-hosted servers CONF-1088@JIRA
RELATED TOPICS

313 Comments

  1. Anonymous

    Does this interoperate with JSPWiki & VoodooPad's XML-RPC interfaces ?

    1. No, it doesn't interroperate with either. The JSPWiki interface is too primitive to do all the things we need, and VoodooPad now integrates with the Confluence APIs AFAIK.

  2. Anonymous

    Any way to change a user's password via remote API?

      1. As of Confluence 2.0, it is possible to change a user's password via the Remote API.

        To change your password, use the following method:

        To change another user's password (requires admin permission), use the following method:

        1. I'm wondering if there is a module or setting to provide a secure password mode.  As of now, using the xmlrpc interface, usernames and passwords are sent plain text.  (!)

  3. I've pulled my hair out to get the addAttachement method working. The signature above is wrong, because it now has four parameters. The second one (content id) is missing.
    It would be great if the confluence xml-rpc service would support server introspection via system.listMethods so one could use tools like xml-rpc-api2txt to get the actual interface description.

    1. Hi Björn,

      I have created CONF-4712@JIRA to look into solving the remote api documentation problem once and for all. Please add any comments to this issue.

      Regards,
      -Daniel

      1. While I'm on the topic, CONF-4714@JIRA fixes this inconsistency.

      2. OK, that's what I'm using now. I'll verify that it's getting passed properly, but thanks for the sanity-check.

    2. I'm trying to extend Confluence.pm to handle this and I can't get the sig to match. what should the last byte[] be passed as (in perl) I've tried a string and an array and get the following errors:

       REMOTE ERROR: java.lang.NoSuchMethodException: $Proxy40.addAttachment(java.lang.String, java.lang.String, java.util.Hashtable, java.util.Vector)

      And
       REMOTE ERROR: java.lang.NoSuchMethodException: $Proxy40.addAttachment(java.lang.String, java.util.Hashtable, java.lang.String)

      Any thoughts? 

  4. Hi,
    How do I set a permission on a page? I know I can getPagePermission() but i don't see a setPagePermission()
    thanks
    Dan

    1. Hi Dan,

      Currently, there is no way to set page permissions via the Remote API. We have an issue for this at CONF-3908@JIRA, which you can follow if you want.

      Jeremy.

  5. Any chance of the Confluence data types in the #Remote Methods section being linked to their description further down the page? E.g:

    • ServerInfo getServerInfo(String token) - retrieve some basic information about the server being connected to. Useful for clients that need to turn certain features on or off depending on the version of the server. (Since 1.0.3)

    That would make it much simpler to read the docs, rather than scrolling at random...

    And if you're feeling really generous, the data type description could link back to methods which make use of it also (smile)

    1. Good idea, David. I've filed this as CONF-4848@JIRA

  6. The documentation for lastModified as part of the search method should also note that it is legal to use the 2w, 1d, 3h notations.

  7. I've been able to call the String exportSpace(String token, String spaceKey, String exportType) method and get a String representation for the download url.  However when I try to download, I get a 403 error.  Any solution for this?  Thanks

     java.io.IOException: Server returned HTTP response code: 403 for URL: http://localhost:8080/download/temp\export_01272006_164839\ds-20060127-16_48_41.zip
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1149)
      

    1. Hi Thomas,

      If you change the backslashes in the URL to forward slashes, does it work? How have you defined your confluence.home directory?

      Jeremy

    2. I tried with HttpClient and it work, on the default install we have to initiated a login since the LoginFilter will kick you out if you don't.

           HttpClient client = new HttpClient();
                  HttpState initialState = new HttpState();
                  Cookie mycookie = new Cookie("localhost", "mycookie", "download", "/", null, false);
                  initialState.addCookie(mycookie);
                  initialState.setCookiePolicy(CookiePolicy.RFC2109);          
                  client.setConnectionTimeout(30000);
                  client.setState(initialState);
                  PostMethod post = new PostMethod("http://localhost:8081/confluence/login.action");
                  post.addParameter("os_username", "admin");
                  post.addParameter("os_password", "*****");

      1. Certainly you can 'screen scrape' Confluence using HttpClient, but the value of the remote interface is that it is documented, so you don't need to examine Confluence's HTML, which may change without warning at any time.

    3. Try adding ?os_username=your_username&os_password=your_password onto the end of the URL. That will log you in at the same time as you are downloading the file.

      1. I had same problem and adding the user name and password didn't help.

        java.io.IOException: Server returned HTTP response code: 403 for URL: http://localhost/download/temp/Test-20060218-22_41_43.zip?os_username=automation&os_password=xxxxx

        1. Thanks, Bob. I've replicated this problem.

          I've raised CONF-5533@JIRA to get it fixed.

          1. Matt, thanks for fixing this. I will check it out when 2.1.5 is available.

  8. Is there anyway to remotly add external content to the search index to make it also available in the confluence internal search?

    1. At the moment, no. But there's a feature request to allow indexing of external content in Confluence: CONF-1436@JIRA

      Once that is implemented in Confluence, I imagine it won't be hard to provide a remote API.

  9. ChangeMyPassword seen to have  the same functionality as changeUserPassword, is this a bug??

    1. changeMyPassword can be used by any user to change their own password, while changeUserPassword is used by an administrator to change any user's password.

      1. I mean I get error when i try to do the following 

            String token = confluenceSoapService.login("aa","222222");

                 successful get token

            confluenceSoapService.changeMyPassword(token, "222222","222222") 

                 error

        but if I login as a adminsitrator user token I can do the following

            confluenceSoapService.changeMyPassword(token, "aa","333333")

                password successful change
         

        1. Hi Justin,

          Can you post the error you're getting when you call changeMyPassword? You may want to create a support request at http://support.atlassian.com/, where we can discuss it privately.

          Jeremy

  10. RE: getAttachment(String token, String pageId, String fileName, String versionNumber)

    If you provide a version of 0 or less, you'll get the most recent version of the attachment.

  11. I've created a Java client for the Confluence XMLRPC that is strongly typed and open source so it can be included in other open source and proprietary projects.

    Example: http://docs.codehaus.org/display/SWIZZLE/Swizzle+Confluence
    Library: http://repository.codehaus.org/org/codehaus/swizzle/swizzle-confluence/
    Javadoc: http://swizzle.codehaus.org/swizzle-confluence/
    Source: http://cvs.codehaus.org/viewrep/swizzle/trunk/swizzle-confluence/

    1. hello,
      when i try to use this:
      Confluence _confluence = new Confluence(_endpoint);
      _confluence.login(_username, _password);

      at runtime i became:
      Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlrpc/XmlRpcClient
      at org.codehaus.swizzle.confluence.Confluence.<init>(Confluence.java:33)

      how can i fix this? i downloaded the apache xmlrpcclient, too, but no change.
      plz help

    2. Hi

      I have tried to use the addAttachment method and get:

      My code looks like this:

      It seems that the error has something to do with:

      org.apache.xmlrpc.XmlRpcException: Unsupported Java type: class java.lang.Long

      and that points to the first parameter "tContentid" that, I assume, would be the ID of the page that the attachment should be attached to. In all other referencet to that ID it is represented as a String. How come?

      1. Haven't looked at your details, but this API works - see Confluence Command Line Interface

      2. Anonymous

        Hi,

         I am getting the same error now. Have you figured out what's the problem? What is your solution? Thanks.

  12. Has anyone successfully used the Metadata-Plugin api extension? From Perl?

    /**
     * Returns all of the metadata values attached to the specified page.
     * @param token The token identifying the current user.
     * @param spaceKey The key of the space that the page belongs to.
     * @param pageName The name of the page.
     * @return An array of MetadataValue objects.
     * @throws RemoteException if the page cannot be found.
     */
    MetadataValue[] getMetadataValues(String token, String spaceKey, String pageName) throws RemoteException;
    
  13. Is it possible via remote API to set a list of users (or a single user or usergroup) to receive e-mail notifications for a specific page or space?

    We would like people to automatically receive e-mails for the spaces/pages they should be tracking but without having everyone to set the notifications for themselves (error-prone, especially if we keep adding important spaces/pages they would have to do this every time).

    1. This isn't possible at present. You can add a feature request at http://jira.atlassian.com

      The closest thing to what you want is to get each user to subscribe to an RSS feed for content with a particular label (e.g. their username), and to add the appropriate labels via the remote interface.

  14. There seems to be a problem with the API as it does not seem to recognise the username if the username is a number.
    I have created a user called anothertest using the API, then i assigned it to a group. All worked

    I then created a user called 12345689, this worked, however when trying to allocate this to a group it return undef?

    From within Confluence searching for the user 123456789 returned the correct user.

    Any ideas?

    1. Hi Varindarpal,

      Please open a support request at http://support.atlassian.com, and include the source code of the client you have written.

      Thanks,
      Tom

  15. is there a way of getting all the users in a particular group?

    1. Hi Varindarpal,

      Looking at the available remote API, User Management section, I do not see any possible way of doing so.

      Could you please raise support request :

      https://support.atlassian.com

      Thanks,
      Ivan

  16. Is it possible to change user login?

    1. I'm not sure I understand the question. Could you explain exactly what you're trying to achieve?

      You can log in as a different identity in the remote API just by calling the login method with a different username, and using the new token it returns.

  17. Is there an XMLRPC interface to Export Page? (not Export Space)

    1. Hi David,

      No there is no interface to export a page. This functionality is not directly supported in the UI either.

      Thanks,
      Iva

      1. You wrote: This functionality is not directly supported in the UI either.

        Sure? What about the little icon at the top right of the page? It does exactly that: exporting a page to PDF.

        I'm currently looking for a possibility to export certain pages to PDF using an ant script or task. I failed to pass login information with a HTTP-request (I don't have cookies in ant). Jira supports login information passed as URL parameters: os_username and os_password but this seems not to work with Confluence.

        Any ideas?

  18. Page storePage(String token, Page page) - add or update a page. For adding, the Page given as an argument should have space, title and content fields at a minimum. For updating, the Page given should have id, space, title, content and version fields at a minimum. The parentId field is always optional. All other fields will be ignored.

    I need to programmatically add new pages and their revisions, and get the proper date and times (from the past) assigned to the updates.     For example:

        AddPage Foo  "12-17-2005"   Revision 1

        AddPage Foo  "1-15-2006"  Revision 2

        AddPage Foo  "10-26-2006"  Revision 3

    Will this be possible, or will setting the date field when I call StorePage be ignored?

  19. hi,

    is there a "getting started" guide for XML-RPC development?

    thanks!

  20. I'm trying to find a way to either a) get the password of a user (for emails of type 'forgotten password'), or b) a function in either Confluence or JIRA to send the user his/hers credentials. I can't seem to find neither?

    1. Alexander: Passwords are hashed before they are store in Confluence. The only way to get a "forgotten password" email is to change the password with changeUserPassword to some known value and send them that in the mail.

      Confluence's mail-sending API is not exposed in the Remote API. We didn't think it was necessary.

      1. Ok. Does my luck change if I say we manage our users in JIRA?

        1. Hi Alexander,

          The passwords are also hashed in JIRA. Thus, it is still not possible.

          Regards,
          Mei

          1. Notice that I'm more converned about a way to mail my users their credentials more than actually getting the password. I find it quite bizzarro that there is no such thing in neither API. Another problem is the lack of documentation for most of the remote function calls (Confluence); why are there no examples of anything? I'm having a hard time trying to work out how to set users permissions to spaces; not a single example. Has anyone done this?

      2. I may add that the time of your server seems botched and in need of a shave.

        1. Hi Alexander,

          The time on the server seems accurate to me. Do you still see a problem with it? If so what? Is it an exact number of hours out? Have you set the timezone in your profile?

  21. Need a way to only allow certain users, or certain groups of users, to use the API. We would like to manage our wiki through the API with the use of some external scripts, without throwing the API open to all our users. There are too many possibilities for unapproved users to accidentally do denial of service attacks using the API.

    1. Please file this as an improvement or feature request at http://jira.atlassian.com.

      If your users wanted to, they could DOS your site through the web not just through the remote API.

      Cheers,
      Dave

  22. We have getPagePermissions(Token, Page.id), but it seems that setPagePermissions has been forgotten from this list.... Is there some other way to set page level permissions from the API?

    1. An improvement request has be filed for this already:

      http://jira.atlassian.com/browse/CONF-3908

      Please watch this issue to track its progress.

      Cheers,
      Dave

  23. addLabelByName(String token, String labelName, long objectId) seems to accept a labelName that contains a blank separated list of names and adds all of these. Not sure if this is the way it is suppose to happen or just an accident. Please clarify the documentation.

  24. Hi,

    the method getActiveUsers does only return 100 external users maximum. Does anyone know why?

    1. Hi John,

      Did you ever solve this problem? I am facing the same issue but with a maximum of 1000 users. I think it might be related to the users cache which is set to 1000.

  25. if i try to get a Page with any "special characters" like ä ü ö ß in the title I get an error:

    Content-Length header value was wrong, fixed at /usr/lib/perl5/vendor_perl/5.8.5/LWP/Protocol/http.pm line 188.
    !!

    any chance to use pages containing such characters?

    1. Sounds like Perl's Unicode handling is broken.

      1. so, you are able to create a site in you space thats called eg. "Über" ?

        1. Hi Lars,

          I was able to create a space named 'Über' by declaring the following value in my Perl script:

          $spaceName = "\x{DC}ber";
          

          Can you please give that a try and let me know how it goes?

          Regards,
          Mei

          1. I may was a little bit inaccurate, i dont want to create a space with these characters in, i wanted to create a page. I found out that the same error occurs if there is a character like 'öüäß'  within the content of the page.

            Same happens if i try your version.

            Perhabs you can post the relevant code passages of you script?

             Mine looks like this:

            xmlrpcc.pl

            I also tried to utf8 encode the content, which also didnt work.

            1. Hi Lars,

              This is the following code that I have used:

              #!/usr/bin/perl
              
              use SOAP::Lite;
              use Data::Dumper;
              
              my $soap = SOAP::Lite->proxy("http://xxx/confluence/rpc/soap-axis/confluenceservice-v1?wsdl");
              my $auth = $soap->login("xxx", "xxx");
              
              $pageName = "\x{DC}ber";
              
              print "\n";
              print "Creating page: $pageName\n";
              
              $page = $soap->storePage($auth->result(), 
              			  {"space" => SOAP::Data->type(string => "TEST"),
              			   "title" => SOAP::Data->type(string => $pageName),
                                         "content" => SOAP::Data->type(string => "This is the content"),
              			   "parentId" => SOAP::Data->type(long => 524290) # Parent of the page. 
              			  }
              			);
              
              

              Please note that I am using SOAP::Lite for Perl. Hope this helps.

              Regards,
              Mei

              1. Hi,

                I have an authentication problem with a script like yours:

                $client = SOAP::Lite->proxy("http://nautawiki.it.helsinki.fi/rpc/soap-axis/confluenceservice-v1?wsdl");
                $token = $client->login(CONFLUENCE_USERNAME,CONFLUENCE_PASSWORD);

                In the debugger i get this:

                no element found
                yF6MYIk5XO at user.pl line 14
                at /usr/lib/perl5/vendor_perl/5.8.8/SOAP/Lite.pm line 3481
                SOAP::Lite::_ANON_[/usr/lib/perl5/vendor_perl/5.8.8/SOAP/Lite.pm:3481]('SOAP::Lite=HASH(0xa033cbc)', 'no element found\x

                Unknown macro: {a}

                SOAP::Lite::call('SOAP::Lite=HASH(0xa033cbc)', 'login', 'admin', 'xxx') called at /usr/lib/perl5/vendor_perl/5.8.8/SOAP/Lite.pm line 3629
                SOAP::Lite::_ANON_[/usr/lib/perl5/vendor\_perl/5.8.8/SOAP/Lite.pm:3633]('SOAP::Lite=HASH(0xa033cbc)', 'admin','xxx') called at user.pl line 14


                The confluence i using shibboleth authentication (this might be important).

                Have you any idea about what is going wrong?

            2. Anonymous

              I ran across the very same problem.

              $page = $wiki->getPage($space, $title) or die "Cant get Page: $?\n";
              $wiki->updatePage($page) or die "Can't store Page: $?\n";

              And even though I don't change anything I get this error message:

              Content-Length header value was wrong, fixed at /usr/local/lib/perl5/site_perl/5.8.8/LWP/Protocol/http.pm line 189.

              I suppose no one found a solution yet. 

            3. Anonymous

              You need to call pack on the content.

              Something like this should work:

              $content = pack 'U0A', $content;*

              This will allow you to pass UTF-8 content via the interface. NOTE: This only seems to work via SOAP. I couldn't get it to work via XML-RPC.

              Hope this helps someone out!

  26. Hi!

    I want to add a new(!) "Label" i.e. "Swing" to a given page i.e. "Project 2"... I think the two possibilities are

    • boolean addLabelById(String token, long labelId, long objectId) - Adds a label with the given ID to the object with the given ContentEntityObject ID.
    • boolean addLabelByObject(String token, Label labelObject, long objectId) - Adds the given label object to the object with the given ContentEntityObject ID.

    I tried first addLabelByObject,

    the "Object Label" has

    name

    String

    the nameof the label

    owner

    String

    the username of the owner

    namespace

    String

    the namespace of the label

    id

    String

    the ID of the label

    which are necessary for my case?

    Thank you!

  27. For remote user authentication we'd like to use getUserGroups on a per user base. Unfortunately this only works with users, which have admin access, but not for others. Is this on purpose or a bug?

    We do basically the following (in PHP pseudo code):

    $this->client = new SoapClient($this->wsdlurl);
    $this->token = $this->client->login($username,$password);
    $this->groups = $this->client->getUserGroups($this->token,$username);

    if now $username is an admin user, that works perfectly, if it's not an admin user, we do get a
    "com.atlassian.confluence.rpc.NotPermittedException: You don't have administration permission."
    exception. But if I log into confluence with a non-admin user, this user can see his own groups, therefore it looks like a bug to me (and if you think so too, I can add it into your Jira)

    Tested with Confluence 2.4.2 btw

    And here's a little text about what we try to do : http://devblog.flux-cms.org/archive/2007/05/02/flux-cms-confluence-auth-module.html

    1. Hi Christian,

      This behavior is actually implemented on purpose in order to be consistent with the functionality within the UI since it requires admin rights to retrieve user groups. Hence, this should also be applicable for remote access.

      If you wish to make do without the authentication, I would suggest you to write a RPC plugin instead. If you need further help or guidance on the implementation, Atlassian Answers will be the place for such discussion as there may be other users who have developed it before.

      Regards,
      Mei

      1. Mei: thanks fot the answer. We now check if a user has access to a particular space, which works quite well for our needs as well and which is possible with the existing remote API

  28. I'm not having any luck with renaming a page. What am I doing wrong?

    1. I make a hash with the new title, space, content plus the id of the existing page
    2. I get the existing page's current version and put that in the hash
    3. Then I try to storePage

    I get:

    REMOTE ERROR: java.lang.Exception: com.atlassian.confluence.core.persistence.confluence.StaleObjectStateException: The version of the object to be saved was more than the previous version! at wikiUtility.pm line 185

    The storePage works fine if the title does not change. I am using the perl module and my server is 2.3.3

    1. Hi John,

      Would it be possible for you to provide a sample of the code that you use to rename a page? It would be appreciated if you can create a support request at the following link and as it will be easier for us to follow up. Thanks.

      Regards,
      Mei

      1. thanks, Mei, I opened a ticket here.

        It turns out that the problem is not the title change alone, but trying to change both the title and contents at the same time.

  29. Is there any way to flag a page update as a "minor change" like you can in the GUI?

    I'm writing a tool that makes bulk changes to many pages at once using this API, and it's annoying for all of them to move to the top of the Recently Updated list in the dashboard.

    1. Hi Peter,

      I believe your needs have been addressed in the CONF-5725. Feel free to cast your vote to the improvement request and add yourself as a watcher to get its updates.

      Regards,

      Fennie.

  30. Is there any method like getPermissionsForUser, but for the group?

    If not, can we get something like getPermissionsForGroup?

    1. Hi Mathew,

      The method getPermissionForGroup is not available at the moment. In order to include this method in the Remote API, you will need to extend the current class for ConfluenceSoapServiceDelegator.java.

      Regards,
      Mei

  31. When using the storePage method, it works fine when I only update the content, but when I try to update the Title AND Content, or just the Title, it doesn't work.  Any ideas why?

    That's the general code.  When I try to update JUST the title:

    And when I try to update both the title and content:


  32. I think the specification should be updated to take the changes in CONF-2414 into account. As far as I know, now there are no methods returning void; all of them are returning boolean now.

    BTW. This this sort of documentation should be automatically generated from the code.

    1. Hi Catalin
      Thank you for pointing this out. I have raised a JIRA issue and we'll tackle it as soon as possible.
      Cheers – Sarah

  33. I am also having the same issue as Mathew is having.

    org.apache.xmlrpc.XmlRpcException: java.lang.Exception: com.atlassian.confluence.core.persistence.confluence.StaleObjectStateException: The version of the object to be saved was more than the previous version!  this is not happening all the times.
    Its just that it happens whenever the new deployment is done and settings to point to project code webservice changes.

    1. Hi Inderveer,

      Could you please raise a support ticket for this issue so that we can follow up from there? Alternatively, you may want to direct your questions to Atlassian Answers as there might be other user/developers who have already implemented it and should be able to share their ideas with you.

      Thank you.

      Regards,
      Fennie.

  34. Hello,

    Im having trouble with the storeBlogEntry function. The wsdl specifies that the storeBlogEntryRequest message takes 2 parameters, a string(login token) followed by a RemoteBlogEntry. RemoteBlogEntry contains the following fields as specified by the wsdl:

    • id:string
    • permissions: int
    • space: string
    • title:string
    • url:string
    • author:string
    • publishDate:date
    • content:string
    • version:string

    However, Im getting "HTTP 500 Internal Server Error", when I send the storeBlogEntryRequest message with the above data type. Is there some error in the wsdl that I can perhaps correct myself? The reason I suspect so is because the BlogEntry type has the following fields (the locks field doesn't exist in the wsdl):

    id

    String

    the id of the blog entry

    space

    String

    the key of the space that this blog entry belongs to

    title

    String

    the title of the page

    url

    String

    the url to view this blog entry online

    version

    int

    the version number of this blog entry

    content

    String

    the blog entry content

    locks

    int

    the number of locks current on this page


    1. Hi Omar,

      Could you please create a support issue on our support system at http://support.atlassian.com with the following information:

      1. A description of your problem.
      2. The expected outcome.

      We will respond as promptly as possible.

      Alternatively, you may want to direct your questions to Atlassian Answers pertaining to the problem you are having as there might be developers/users should be able to share their idea with you.

      Regards,
      Choy Li

      1. Sorry there was no problem. The problem was on my part. I didnt know that the above API is for the XML-RPC remote API. I thought the SOAP and XML-RPC specs were the same.

  35. I am having trouble using the API to sign in, my Java code is resulting in the following soap message:

    And the result is "Wrong password mate.", when I know that it is the right password. What am I doing wrong, this is what the server is responding with:

    This is a snip of the code:

    I have tried adding the variable "user" as above, and have also tried "username", both to no effect.

    I have also tried naming the paramters as in0/in1 instead of username/password. This still results in an invalid password response. 

    1. Hi Jane,

      SOAP API such as pointers to method usage is supported but not the full coding support. However, we will help to take a look at your code if you can also raise it in our support system at:

      This will allow an easier way to trace and correspond with you via the issue ticket than having long threads of replies here. Please try to explain what you were trying to achieve in the support ticket and from there we will look into it. Thanks.

      Regards,
      Mei

  36. Hi there

    Currently running 2.5.4.

    I'm using renderContent() to pull down a page but all text is centered (in IE6). I'm puzzled
    as the stylesheet is standard and looks ok when rendered inside. Looking at the stylesheet, I assume it is due to this:-

    I assume this must either be a FAQ or something fixed post 2.5.4. (I've searched the KB with no avail).

    Thanks
    Russ Freeman

    1. I've also noticed this in the TimTam exclipse plugin for confluence a long time ago. I guess not too many people use the renderContent() api call, as I don't think this has been raised as an issue. You could try raising it there. http://jira.atlassian.com/secure/BrowseProject.jspa?id=10470

  37. I see you can search for a page within a space. Is it possible to search for a page by specifying the parent page you want to search within?

    1. Hi Steven,

      I am not aware of the method available for this. Additionally, Confluence does not support searching for content within a parent page. However, we are ware of such needs and have an open feature request being raised here:

      If you are keen on the feature, feel free to cast your vote to increase its popularity and add yourself as a watcher for future updates.

      Cheers,
      Tony

  38. Currently the search method returns type,id,title.url and excerpt as a result.  I want the date modified also be part of the result..  How to change the current implementation of confluence ?  Is this a big change or a small one?  pls assist me on this..

    -Hari 

    1. Hi Harikrishnan,

      Unfortunately, Confluence doesn't return the date modified value. However, I would advice you to raise a feature request at the issue tracker http://jira.atlassian.com.

      Regards,
      Mei

      1. Thx for your reply.. 

        Actually we bought the licensed version of confluence for our corporate use. So we have complete source code.  Is there any chance implement this functionality on our own?

        -Hari 

        1. Hi Harikrishnan,

          Yes it is possible to write your own functionality. You might need to write your own plugin, please refer to the following link regarding RPC plugins:

          The full source to the Confluence remote API plugin can be found in the Confluence distribution under plugins/confluencerpc.

          Alternatively,I would advise you to direct your questions to Atlassian Answers as there might be other user/developers who have already implemented it and should be able to share their ideas with you.

          Regards,
          Mei

  39. Hi Bob, This client jar file seems to be old. I am using confluence 2.5.3. Please provide me the steps to generate soap stb jar file. I have gone thru readme.txt in the jar file. It says I need to use maven to generate jar file. Unfortunately I am getting error while running maven.  I have attached error message below. Please help me to generate jar file. I hope once I get the jar file it is pretty strightforward to use API.

    C:\confluence-testing\trunk> maven plugin:download -Dmaven.repo.remote=http://www.ibiblio.org/maven/
     -DartifactId=maven-axis-plugin -DgroupId=atlassian -Dversion=0.7AXIS1.3
     __  __
    |  \/  |_ _Apache_ ___
    | |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
    ||  |_,|_/__|||_|  v. 1.1

    DEPRECATED: the default goal should be specified in the <build> section of project.xml instead of ma
    ven.xml
    Trying to get missing dependencies (and updated snapshots) required by Confluence SOAP client for Co
    nfluence 2.2.9:
    - Attempting to download axis:axis:1.3:jar from http://www.ibiblio.org/maven/
    Error retrieving artifact from [http://www.ibiblio.org/maven/]: org.apache.maven.wagon.TransferFaile
    dException: www.ibiblio.org
    - Attempting to download axis:axis-jaxrpc:1.3:jar from http://www.ibiblio.org/maven/
    Error retrieving artifact from [http://www.ibiblio.org/maven/]: org.apache.maven.wagon.TransferFaile
    dException: www.ibiblio.org
    - Attempting to download axis:axis-saaj:1.3:jar from http://www.ibiblio.org/maven/
    Error retrieving artifact from [http://www.ibiblio.org/maven/]: org.apache.maven.wagon.TransferFaile
    dException: www.ibiblio.org
    - Attempting to download axis:axis-wsdl4j:1.5.1:jar from http://www.ibiblio.org/maven/
    Error retrieving artifact from [http://www.ibiblio.org/maven/]: org.apache.maven.wagon.TransferFaile
    dException: www.ibiblio.org
    - Attempting to download axis:axis-ant:1.3:jar from http://www.ibiblio.org/maven/
    Error retrieving artifact from [http://www.ibiblio.org/maven/]: org.apache.maven.wagon.TransferFaile
    dException: www.ibiblio.org
    - Attempting to download commons-logging:commons-logging:1.0.4:jar from http://www.ibiblio.org/maven
    /
    Error retrieving artifact from [http://www.ibiblio.org/maven/]: org.apache.maven.wagon.TransferFaile
    dException: www.ibiblio.org
    - Attempting to download commons-discovery:commons-discovery:0.2:jar from http://www.ibiblio.org/mav
    en/
    Error retrieving artifact from [http://www.ibiblio.org/maven/]: org.apache.maven.wagon.TransferFaile
    dException: www.ibiblio.org
    - Attempting to download activation:activation:1.0.2:jar from http://www.ibiblio.org/maven/
    Error retrieving artifact from [http://www.ibiblio.org/maven/]: org.apache.maven.wagon.TransferFaile
    dException: www.ibiblio.org
    - Attempting to download javamail:javamail:1.3.2:jar from http://www.ibiblio.org/maven/
    Error retrieving artifact from [http://www.ibiblio.org/maven/]: org.apache.maven.wagon.TransferFaile
    dException: www.ibiblio.org
    - Attempting to download JSAP:JSAP:2.0b:jar from http://www.ibiblio.org/maven/
    Error retrieving artifact from [http://www.ibiblio.org/maven/]: org.apache.maven.wagon.TransferFaile
    dException: www.ibiblio.org
    -------------------------------------------------------------------------------
    >> The build cannot continue because of the following unsatisfied dependencies:
    - axis:axis:1.3:jar
    - axis:axis-jaxrpc:1.3:jar
    - axis:axis-saaj:1.3:jar
    - axis:axis-wsdl4j:1.5.1:jar
    - axis:axis-ant:1.3:jar
    - commons-logging:commons-logging:1.0.4:jar
    - commons-discovery:commons-discovery:0.2:jar
    - activation:activation:1.0.2:jar
    - javamail:javamail:1.3.2:jar
    - JSAP:JSAP:2.0b:jar

    -------------------------------------------------------------------------------
    BUILD FAILED
    -------------------------------------------------------------------------------

    1. You can dowload all the dependencies from http://repository.atlassian.com, except I had to do get jsap manually and put it in my .maven repository.

  40. addLabelByName(String token, String labelName, long objectId) treats a space-separated string as multi-labels.

    My question is how we can add a label whose name contains space, e.g., we want to add a label called 'user password' to a page by using remote API, how can I do it?

    addLabelByName(String token, String labelName, long objectId) simply add two labels - 'user' and 'password' in this case now, but what I want is adding one label - 'user password'. Is it possible to obtain by using remote API?

    1. Anonymous

      As currently implemented, Confluence labels can not contain spaces.

  41. Hi,

    Confluence 2.7 SOAP API is broken.

    You can check this from http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1?wsdl.

    1. Hi Jinwoo,

      Thanks for reporting this issue. However, I have raised a bug request at the following link:

      Feel free to put the comment and add yourself as a watcher there so that you will be notified for future updates.

      Regards,
      MG

  42. I am doing some dev work using the APIs, namely for searching the wiki.  I am able to search for content successfully, but I am not able to do pagination through the API.

    The API spec above seems to have a parameter to control the page size (i.e. number of results returned) for a query, but does *not* seem to have a page offset (i.e. to do a subsequent search to get results 11-20, if the page size is 10).  It also doesn't seem to return the total number of results found.

    Strangely, both of the above (total hits and page offset) are features supported in the native application search functionality.

    Has anyone run into this issue?  Any solution?  Any other ideas?

    Thanks

    1. Hi Joe,

      I have created a feature improvement on your behalf and it's currently being tracked at:

      Feel free to edit the issue to truly reflect your needs and add yourself as a watcher for future updates. This feature does come in handy, but do note that it may be too taxing on the application as it will have to process the searches, thus, causing it to run out of memory. It's best that the method call be done during non-peak hours or when there aren't many processes being executed.

      Regards,
      Mei

  43. It appears that the XML-RPC interface does not support creating pages. The SOAP interface does (by overloading storePage).

    If this is the case, it should either be fixed, or XML-RPC's inferiority documented so people don't waste time on it.

  44. I can easily create new pages in a space using the XML-RPC interface. I'd now like to create a page based on a template (global or otherwise). Is there a way?

    1. Hi Rob,

      I would suggest you to post your queries to Atlassian Answers. From there, others developers/users who have experience should be able to share their ideas with you.

      Regards,
      Choy Li

  45. Hi,

    calling the method

    byte[] getAttachmentData(String token, String pageId, String fileName, String versionNumber)

    with versionNumber = page.getId();

    is causing the following Exception:

    com.atlassian.confluence.rpc.RemoteException: No attachment on content with id 32787, name 'excelspreadsheet.xls' and version 60 exists

    However, if I hard code the versionNumber and set it to 0 or 1, it works.

    What am I doing wrong?

    1. I think you'll find that the version number here is for the attachment, not the page. So, if you provide '0' as the version number it will get the most recent attachment version, otherwise it will try to get the version you specify.

      1. Thanks!

        Still I find it strange that the methods

        byte[] getAttachmentData(String token, String pageId, String fileName, String versionNumber)

        Attachment getAttachment(String token, String pageId, String fileName, String versionNumber)

        require to specify the versionNumber of the attachment since the API doesn't seem to have a method to get its available versions.

  46. Is there a way to add a change comment when you update a page?

    (This apparently is a different set of comments from the comments that are described on this page--those are page comments, and adding those works fine. The kind of comment I need to add is the one that appears on the History page, associated with a version.)

    1. Hi Jonathan,

      This feature is not supported in Confluence currently. However, there is an improvement request being raised at:

      Please cast your vote and add yourself as a watcher for future updates. Thanks.

      Regards,
      MG

      1. I presume this also means that there is currently no way to read version comments through the API? [as opposed write a version comment]

        1. Hi Mick,

          Yes, this feature is not available in Confluence remote API currently. Hence, I would suggest you to follow up the issue from the improvement request http://jira.atlassian.com/browse/CONF-4288. Thanks.

          Regards,
          MG

  47. I have a question is that if I use the confuence remote api to do something on commercial software,It will be cognizanced as a tortious action? I have found the xwiki xml-rpc is based on confluence remote api, why xwiki has the admit to use the confluence remote api ? or it's means that the confluence remote api  is a open rpc api for use? 

  48. I have a quesiton about remote api, I use the REST method to call the confluence1.storePage api, the postData I defined is postData: "<?xml version=\"1.0\"?><methodCall><methodName>confluence1.storePage</methodName><params><param><value><string>rG8HNXJq6kJOI64LjP5RcRjIibi2OHwjAGEybPJzqOd4QLDwRZNAMs9ndQA458KqI50bQU7tCwyvA5Eif2AI54fYafMfrRBNPDCNC8RoknmBSTG4APhE7qTL6FIfcVQg</string></value></param><param><value><Page><id></id><space>csico</space><parentId></parentId><title>sports</title><url></url><version></version><content>the nba's real-time data is supported by csico</content><created></created><creator></creator><modified></modified><modifier></modifier><homePage></homePage><locks></locks><contentStatus></contentStatus><current></current></Page></value></param></params></methodCall>", The response is <?xml version="1.0" encoding="ISO-8859-1"?><methodResponse><fault><value><struct><member><name>faultCode
    </name><value><i4>0</i4></value></member><member><name>faultString</name><value>Failed to parse XML-RPC
    request: Unknown type: Page</value></member></struct></value></fault></methodResponse>, it's said unknown type:Page.
    anybody can explain the reason of this case?

    1. Hi there,

      To my understanding, REST is not a supported remote choice for Confluence. Confluence only supports XML-RPC and SOAP. Hence, you may want to give a try to use other methods and see if it helps.
      If the problem persists when XML-RPC or SOAP is used, feel free to raise a support request for further assistance:

      Cheers,
      Tony

  49. Anonymous

    How can I add tables to a page?

    Right now, everything I send to the page via page.content is sent to Rich Text and not Wiki Markup.

    1. Anonymous

      No change on this since 2008?
      The API still can't add tables?

      1. It's simple to add tables. You can create the content using wiki markup. Just assign a variable with the formatting you want.

        ...in Perl the code might look something like this:

        Hope this is helpful.

        1. Anonymous

          Good news!
          Can you provide a Java sample, please?

        2. Anonymous

          service.updatePage use rich text. So an example will be helpful.

        3. Anonymous

          Creating a page or updating it always use rich text.
          I just need to NOT escape the pipes ( | ).

        4. Anonymous

          service.setEnableWysiwyg(token, false); // undocumented

  50. Has anyone gotten addAttachment to work from Python, and, if so, can you give the code? I'm having trouble, and I'm not sure where it is. I get the error "no element found: line 1, column 0", and I'm thinking maybe I'm not setting up the attachment object correctly or need to encode the data parameter in some way I haven't been able to figure out or something. Or maybe it just doesn't work from Python...

    1. Hi Jonathan,

      If you are using xml-rpc, please refer to the forum below:

      If you are using SOAP instead, please see:

      You will simply need to substitute JIRA reference/method with Confluence's.

      Regards,
      Mei

  51. Does anyone have an example of using "addAttachment" with Perl? I'm having trouble getting it to work - an example sure would help.

    addAttachment(String token, long contentId, Attachment attachment, byte[] attachmentData)

    Thanks,

    -Greg

  52. I use the addAttachment successfully in C# but the Watch functionality doesn't work, the users don't get notification.

    We have a page that displays attachments and users can watch it, while using the UI, adding or updating attachments sends notification to all the watching users, BUT adding new attachments using the API doesn't send the email, any ideas?

    1. Hi Itay,

      Could you please raise a support ticket regarding this at:

      From there, we will help to investigate this issue further.

      Cheers,
      Tony

  53. Anonymous

    Hi Does anyone know how to successfully render macros (vote, card deck etc)

    Just to give you a bit off info into what i am doing is, i ahve a webpage with a number of portlets on it, each user can customise there portlet to point to what ever wiki page they want, this works for most pages apart from when pages start to contain macros.

    Any ideas on whether this can be done, and if so what is the proper way to go about it?

    Stephen 

    1. Hi Stephen,

      I am not sure with the portlet implementation and its compatibility to render content. May I know if simple macro such as the {info} macro works? Or the problems only occur to specific macro defined?
      Perhaps, you should try open a discussion in Atlassian Answers as the users/developers there who have experience in similar scenario may share their idea with you.

      Cheers,
      Tony

  54. Hi....

    I was trying to fetch all the spaces by doing the modifications to code in remote import plugin, but am not able to find what kind of services that confluence do provide such as "confluence1.getSpace".

    Please provide the url/documentation for all the services that confluence do provide. "confluence1.xxxxxxx".

    Thanks
    Imtiaz

    1. Hi Imtiaz,

      You might want to take a look at the APIs for Confluence available at:

      If you need further assistance on the coding aspect, please utilize Atlassian Answers.

      Regards,
      Mei

  55. I'm trying to add a Label to a page in a particular space. I assume I can use this call: 

    boolean addLabelByName(String token, String labelName, long objectId) - Adds label(s) to the object with the given ContentEntityObject ID.

     I don't see "objectId" specified anywhere - how do I go about getting the objectId? Is there a better way to add a label to a particular page in a particular space?

     Thanks,

    Greg

    1. Confluence Command Line Interface has

       confluence --action addLabels --title temp --space Test --labels "testLabel" 

      or you can look at the implementation Java source.

      1. Hi Bob - is there an example of adding labels using Perl? I can add pages and attachments - however adding labels doesn't seem as straightforward - the data structure that it uses as part of the calling parameters seems different than the other functions. All I want to do is add labels to pages within a particular space.

        -Greg

          1. I setup my Perl script to call the command line interface as an external application - this makes it pretty straight forward to set the space labels. Thanks for recommending that.

            -Greg

  56. getLabelsById(String token, long objectId) API seems to return all the labels in one go. Does there exist any API which performs the same task but with pagination? I mean I need to restrict the number of results for get Label API's. I have gone through the API's which return popular and related labels but my requirement is fetching up all the labels.

    1. Hi,

      You may want to create a feature request about this at :

      http://jira.atlassian.com

      Regards,
      Fennie

  57. the 'comment' object class above talks about propertyies that refere to 'attachments'. I beleive these should read 'comments'.

    created

    Date

    creation date of the attachment

    creator

    String

    creator of the attachment

  58. I'm having trouble with the search methods--when I try to use them, I get a method-not-found error. Has anyone has success using these?

    1. Hi Jonathan,

      I would suggest you to raise a support ticket at our issue tracker for further investigation to this issue:

      Regards,
      MG

    2. we use it without difficulty. works very well from SOAP interface.

  59. Is there a way of using the SOAP API with single sign on? I would like to supply an LTPA token as authentication and not have to call the login method.

    Regards, Dean

    1. Hi Dean,

      I would advise you to direct this question to Atlassian Answers. There is a similar discussion at:

      Regards,
      Mei

  60. Is it possible to get a list of wiki favorites for a particular user? Something along the lines of the below would be ideal

    Vector getUserFavorites(String token, String username)

    1. Hi Declan,

      As far as I am concerned, this feature is not currently available in Confluence. However, if you are keen on this, feel free to raise an improvement request at http://jira.atlassian.com. Hope this helps.

      Cheers,
      Azwandi

  61. How would I get the list of permissions for a space, eg group X has VIEW permission and whatnot. I see methods to add and remove these, but nothing to get the current list.

    cheers, jamie

    1. Hi Jamie,

      The closest method I could find is getSpaceLevelPermissions. If you would like to retrieve which specific group/user is granted which level of permission, you will need to extend the method to cater for such requirement. For more assistance, please utilize Atlassian Answers.

      Regards,
      Mei

  62. Hi,

    We're translating content created in Confluence. 

    An author might save a page, with a comment like "Ready for translation".

    Then, the author might continue to edit the page. 

    I want to be able to loop through all versions a particular page, and find the most recent version that has the save comment "ready for translation".

    I then want to pull down that version's content.

    I don't believe that this is currently possible through the API? 

    For it to work, I think I need:

    - the 'save comment' to be part of the PageHistorySummary object

    - the ability to pull down the content of a particular historical version 

    Any plans to enable either of these?

    Thanks,

    ~mm 



    1. Hi Mick,

      This feature is not available in Confluence's remote API currently. However, I would suggest you to raise a feature request at http://jira.atlassian.com. For more information about how we implement new features and improvement, please see the link below:

      Regards,
      MG

  63. Hey guys,

    I've been trying to get a test xml-rpc request to work using the latest Confluence.pm package. I keep getting the following error:
    XML-RPC ERROR: Unable to connect to https://wiki.ourserver.com:8443/rpc/xmlrpc

    When I take a look at the $RPC::XML::ERROR variable, I get something that looks like this:

    RPC::XML::Client::simple_request: RPC::XML::Client::send_request: HTTP server error: Can't connect to https://wiki.ourserver.com:8443/rpc/xmlrpc (Invalid argument)

    I can't seem to find anyone else who's had this problem. I know our wiki is set up correctly and that my credentials are correct since I'm able to use the python scripts without any problems.

    Any ideas would be greatly appreciated!

    David

    1. Hi David,

      I would suggest you to raise a support ticket via https://support.atlassian.com for further investigation. Thanks.

      Regards,
      MG

  64. Thanks for exposing this functionality as a WebService, it allows us to make much better use of Confluence than we could otherwise.

    It's a real shame however, that the API is out of date. I have reverse engineered Java objects based on the 2.9.1 WSDL file.  These objects have attributes that aren't defined here. Is there any more up to date source of documentation?

    It's kind of surprising since we use your tools to communicate this same type of information to our team.

    I really don't want to post a comment for every API question that must be already documented somewhere.

  65. The importSpace method has existed in the remote API since 2.4, but was not previously documented. I've added it above.

  66. Anonymous

    I'm using the API to do a search over multiple spaces (searching one space at a time).  What sort order are SearchResults returned in?

    Also, whenever I do a standard search, the excerpt given is much more related to the search that if I do a search on the API.  The API just gives the first few sentences (at most) of the page.  This does not help very much when you actually need some kind of context to match up with the page title.  If it can return a more 'google' like excerpt, I would love to use that.

    Thanks.

    1. Hi,

      As you may know that Confluence is using lucene as its search engine. its sorting order is based on the most relevance document against the word that you are looking for. If you have Confluence source code, it should be located in LuceneSearchManager.java. For more information about relevance of certain document, please refer to lucene documentation.

      Cheers,

  67. Anonymous

    Has anybody used the Microsoft Office 2003 Web Services Toolkit to with the Confluence XML-RPC API.

    Although I can login, getSpaces, and getPages by adding missing elements such as "id" to the remotePageSummary structure created by the toolkit and by using IXMLDOMNodeList for some complex structures, I am unable to use either the storePage or getPage functions. I suspect it has something to do with the toolkit which creates identical storePage functions when there are two with different parameter lists and seems to create structures with essential elements missing.

     Has anybody used storePage or getPage functions with Microsoft Office 2003 Web Services Toolkit to with the Confluence XML-RPC API using .NET/VBA as the client language?

    Thanks 

    1. I haven't used that tool specifically, but XML-RPC isn't designed for automatic creation of a client-side API like you describe. Saying, "the toolkit which creates identical storePage functions", is what seems weird to me, because XML-RPC libraries don't typically create anything.

      Normally, with XML-RPC, you simply invoke a named method and pass the required parameters. I'm not sure what this toolkit does differently, but you might want to try a simpler approach of using some .NET XML-RPC library where you pass the method name and the parameters as Strings rather than automatically generating an API for Confluence specifically.

      If you're not limited to .NET, there are many frameworks for Perl, Python and Ruby that are easy to use in this way. There are many examples on the web of using these scripting languages with XML-RPC.

      1. Anonymous

        Matt,

        Thanks for the reply. I tried XML-RPC.NET, however, I think I'm flogging a dead horse. Here is the msg, I sent to the author:
        Charles,

        Someone recommended that I try XML-RPC.Net for accessing a Confluence XML-RPC webservice.

        I was intrigued and went to  the source, however, I can't get to first base and I wonder if I am barking up the wrong tree. The FAQ says of installation:

        In Visual Studio .NET this is is achieved by using the References dialog which is invoked from the References item in the Solution Explorer.

        So I tried the same thin in the Microsoft Visual Basic Explorer>References>Browse>...CookComputing.XmlRpcV2.dll
        Receiving the message "Can't add a reference to the specified file" with the fuller description, "You tried to use the Add References dialog box to add a reference to a type library or object library that can't be used by Visual Basic."

        Is it possible to use XML-RPC from VBA? Any examples?

        Thanks

        Bob

        Re: XML-RPC libraries not creating anything, here is the text of the message in a class/wrapper created  by the toolkit:

         '*****************************************************************
        'This class was created by the Microsoft Office 2003 Web Services Toolkit.
        '
        'Created: 11/10/2008 12:20:56 AM
        '
        'Description:
        'This class is a Visual Basic for Applications class representation of the user-defined
        'type as defined by http://wikidev.owfg.com:8280/rpc/soap-axis/confluenceservice-v1?wsdl.
        '
        'This class only contains the RemotePage,
        'as defined in the WSDL.
        '
        'Changes to the code in this class may result in incorrect behavior.
        '
        '*****************************************************************

    2. Anonymous

      Hi,

      I am running into same issues.. Struct_RemotePage does not have ID and other fields it is supposed to inharit from remotePageSummary..Even when I add those fields manually in class definition, it still complains at the time of the assingment. Element id not found...

      I am unable to use getPage. Even when I try to use IXMLDOMNode object instead of object of type RemotePage, same error is thrown.

  68. Anonymous

    My company is evaluating confluence for our doc management system, and I've been put in charge of testing out the SOAP api to see if it will do what we want.  I'm having a really hard time figuring out how to use a "Map" in C#.   I wrote a silly little program to search the pages via the API and then what I want to do is render the page as HTML.  So I'm using the renderContent() function.  I can get everything to work perfectly when I use the renderContent(Token, Space, PageID, Content) function, but I want to turn off all of the extra CSS stuff, so I want to use the version that takes the render parameters: renderConten(Toke,Space,PageID,Content,Parameters) where I can set "style=clean".  I just can't seem to find out how to create a map or pass it into the function.  I've tried using the Map type that's created from the WSDL, I've also tried using the native Hashtable and Dictionary C# type, but nothing works.  Can someone give me an example of how to do this?

    Here's what I have so far:

  69. Can anyone suggest a means of moving a page (and all comments, attachments and sub-pages) from one space to another?

     When I try to change the space attibute of a page and save it, I get the following Remote Exception.


    1. Hi Waldo,

      Are you changing the space attribute remotely? Or you actually moving the page locally in your confluence as described here:

      I would suggest you to raise a support ticket via https://support.atlassian.com for further investigation. Please attach the Confluence logs for review. Thanks.

      Regards,
      MG

      1. Ming Giet,

        Thanks, I created the ticket as you suggested, I am adding the response here as more documentation.

        Thanks for your help.

        Waldo

  70. When I perform a search using the API, I get an array of results.  How exactly are these sorted? 

    Also, can someone from Atlassian give me specifics of how the search algorithm determines which results are more relevant than the other ones?  I just need to know so that I can report back this information so we may be able to tweak our search to bring  back more reliable results.

    Thanks,

    Craig

  71. I see that there is a way to add a profile picture, is there a way to get a profile picture?

    1. Hi John,

      I am afraid that this may not be possible yet to be done through the remote API. Feel free to raise an improvement request at http://jira.atlassian.com if you are keen on it.

      Cheers,
      Azwandi

  72. Anonymous

    Is there a way of retrieving a list of pages, within a space, that have been assigned a specific label? Either directly through Confluence notation, or through the Remote API - both will work fine for us. The only method I've found is a global search using the URL, which unfortunately would include a number of irrelevant pages.

    Something like this would be nice to have in the API:

    Alternative, in the Confluence notation:

      {search:label=labelName}
    
    1. Hi,

      Yeah, you are right you can use search function in remote api. Actually, Confluence provides you a way on how to search pages based on label. By putting the following text:

      labelText: <label name>
      

      Note that there a space between.

      Thus, you can use remove API in regards of search using the above pattern of search as a query string.

      Cheers,

      1. Anonymous

        You don't need the space after "labelText"

    2. Anonymous

      RemoteSearchResult[] getLabelContentByName(String token, String labelName) is close, but doesn't limit to the space.

      1. Anonymous

        Combination of

        RemoteLabel[] getLabelsByDetail(String token, String labelName, String namespace, String spaceKey, String owner)

        and

        RemoteSearchResult[] getLabelContentByObject(String token, RemoteLabel labelObject)

        might do the trick.

  73. Anonymous

    I need access Most Recently Updated Pages using SOAP API...Is there a way to get that?

    Also, Is it possible to access a macro in confluence using SOAP API?

    Thanks in advance!!

    Regards

    Viswanath

    1. Hi,

      If you mean that you want to get the HTML code, you need to create a page which contains:

      {recently-updated} 
      

      you can see on the method which is used to create a page and then using renderContent method, you will get the HTML code of the page. This is a HTML code of the page which has been rendered by Confluence.

      If you just use getPage method, the method will give you a wiki markup of the page, while if you use renderContent, you can get the HTML code.

      Hope this helps.

      Cheers,

  74. Anonymous

    There are a variety of methods which take a page-id, but the only way to get a page-id if you have the space/name is to call getPage.  however, this call will retrieve the content as well, which may be large an not necessary.  would be nice to have some form of getPageNoContent just for getting the metadata (also could be used to see if the version number has changed, etc).  or maybe a getPageSummary method (although that's a very trimmed down structure, would work for getting page-id but not current version).

    1. Thanks, I have created an improvement request here. Feel free to chip in your comments, add a watch and cast your vote to increase the popularity of the request. Hope that helps!

  75. Anonymous

    The methods around attachments are a bit disjointed.  For instance, even if i have an Attachment structure, i cannot call getAttachmentData because the Attachment structure does not contain the current version!  additionally, it would be nice if there was a getAttachment(String token, String pageId, String fileName) [no version number] which got the current version of the attachment.

    1. Hi,

      As far as I am concerned, you can specify a "0" to get the current version of attachment. For isntance, the following sample method call should do it:

      byte[] myatt = service.getAttachmentData(token, 3735579, "my.txt", 0);
      

      Hope that helps!

      1. Anonymous

        well, that's good to know, thanks!  would probably be good to note that in the documentation above.

        Also, it would still be good to have the version number in the Attachment structure, so that you could be sure that the result of a getAttachment call matches up with the data retrieved (you could use the version number from the first call in the second call).

        1. Hello there,

          Thanks for your suggestion. This is quite a useful piece of information so it's been added to the documentation above.

          Kind regards,
          Giles Gaskell
          Technical Writer
          ggaskell@atlassian.com
          ATLASSIAN - http://www.atlassian.com

  76. Anonymous

    Hello,

    I am using SOAP API and have the following questions:

    1. How Search algorithm works? I know its not case-senstive and returns different results when I search for "TEXT1+TEXT2" and "TEXT1 TEXT2" and "TEXT2"....Sometimes it takes the correct match and sometimes its takes the partial match.. so bit confused here (smile)

    2. Is there a way we can combine contents of 2 or more pages using SOAP API?

    3. Can I get search results grouped by some particular order using SOAP API?

    4.Is it possible to create/access wiki templates using SOAP API?

    Thanks in advance!!

    1. Hi,

      Here are my inputs for your questions:

      1. For details on how the search algorithm works, please refer to the Confluence Search Syntax, the remote API search actually uses the same syntax as the quicksearch in normal confluence (the search box at the top right of every page), you can even use things like spacekey:MYSPACEKEY as part of your search to search for all items in a space.

      2. You cannot do this directly through the SOAP API, if you want such a functionality, when fetching pages from the remote API, you can access the contents of the pages via the "content" parameter of the Page objects, you can concatenate these results together after fetching them.

      3. There is currently no functionality to allow grouping of search results, you can try to implement this on your side by sorting the search results yourself if you want.

      4. There is currently no functionality to allow the creation and access of wiki templates, there is a issue raised to add this functionality CONF-11393, you may vote for this issue if you are looking for this functionality.

      Regards,
      Bo Wang

      1. Anonymous

        Thanks Bo Wang.

        I'm also have some questions in search using SOAP API.

        1. The search API doesnt seem to include text in DOC/PDF attachments.

        2. Also, I'm not sure how can I restrict the search API to include those from say pages and attachments.

        Can you please help?

        Thanks in advance!!

        1. Hi,

          The remote API to perform search is actually the same as you perform search in Confluence but this only returns you a list of search result. I have tried this using xml-rpc and it works like when I use Confluence web UI to perform search.

          The following is a sample snippet of the code:

          params = new Object[]{token, "test", 7};
                      Object temp[] = (Object[])client.execute("confluence1.search", params);
                      for(int i=0; i<temp.length; i++)
                      {
                      	System.out.println(temp[i]);
                      }
          

          Cheers,

  77. Anonymous

    Is it possible to read AttachmentData from a Word/PDF document using SOAP API?

    Thanks in advance!!

    1. If I understand you correctly, you can use this method to get the attachment content:

      byte[] getAttachmentData(String token, String pageId, String fileName, String versionNumber)

      Hope that helps!

  78. Anonymous

    Hi there,

    Running into a silly problem when using Python (xmlrpclib) to query Confluence. I am stuck on the renderContent function. I want the rendered content of the page, so I leave out the 'content' parameter and the wiki complains renderContent takes 4 params. I put in null (ala the CLI) but python complains it doesn't understand null. I put in None, but the wiki doesn't understand None. I put in 'null' and and my page has the string 'null' as the content. Does anyone have any experience with using Python and Confluence?

    Thanks

    Carmine

    1. Anonymous

      did you try an empty string?

      1. Anonymous

        The empty string populates the body of the rendered page with an empty string. If you pass the renderContent function any kind of string, it puts that string in the body. If you leave out the parameter, the wiki complains. I am looking at Jython as a possible solution.

        Carmine

        1. Anonymous

          odd, the empty string worked fine for me in lisp.  but maybe the underlying xml-rpc library handles empty strings differently.

          1. Anonymous

            And the empty string works in Python as well, my mistake. My empty string had a whitespace in it, hence it wasn't really empty.

            1. Anonymous

              Because XML-RPC does not have a concept of null ; the empty string is the closest thing.

    2. Hi,

      I have tried to use an empty String like other customer suggested and Confluence renders the existing page. The following is the code that I use:

      from xmlrpclib import ServerProxy, Error
      server = ServerProxy("http://localhost:8210/wiki/rpc/xmlrpc")
      token = server.confluence1.login('admin','arie')
      print "ini tokennya: " +token
      print server.confluence1.renderContent(token, 'test', '917506', '')
      

      Hope it helps.

      Regards,

    3. Anonymous

      when you create the ServerProxy, specify 'allow_none=True'. Then you can include None in the argument list to renderContent.

  79. Anonymous

    getChildren returns the children in alphabetical order even if a different manual order has been specified for that page. Is there a way to get the children sorted according to the manual ordering?

    1. Hi,

      The order of the method should be the same as in the Confluence page. If your page has a child and when you click "Show Children" in the page. Confluence should list pages which are being its child. The list of pages have an order and when you perform search using Remote API, the order should be the same as in the UI. The following is the test code that I use:

      from xmlrpclib import ServerProxy, Error
      
      server = ServerProxy("http://localhost:8210/wiki/rpc/xmlrpc")
      token = server.confluence1.login('admin','arie')
      print "ini tokennya: " +token
      temp = server.confluence1.getChildren(token, '1540099')
      for item in temp:
          print "==> "+item["title"]
      
      
  80. attempting to update a page's parentid using storePage is not working as of today in Confluence 2.10. I created an issue for it here: http://jira.atlassian.com/browse/CONF-14080

  81. I'm occasionally receiving null pointer exceptions when using the search feature via RPC in Confluence 2.10. For instance I can search for 'test' in my sandbox in a browser, and get results, but the same search via RPC returns a null pointer exception. Other searches work without any issues though, and I've been unable to track down exactly why this happens. I've also been unable to reproduce it in 2.8.2, but that could just be because I haven't used any search terms that trigger it. Any ideas?

    1. fwiw I was able to reproduce this in 2.8.2. Am I doing something wrong by chance?

    2. I was once having this problem and please try to decrease the number of the result being displayed. You can try to increase it incrementally. Please give a try on our Confluence (http://confluence.atlassian.com). I can only limit the number of result to 2 so that I cannot get a problem of NPE.

      It seems to be a Confluence's bug.

      1. This didn't seem to work either. I was being excessively greedy, and grabbing results of 50 previously, but I scaled that back to 1. Same results with select search queries. Searching remotely for the word 'test' returns an NPE, but in a browser it returns 22 results.

        1. I was getting this NPE and my license was expired, once I updated my license it went away.

          1. I've attempted this against 3 different Confluence instances, CAC here being one of them.

  82. Does anybody know what exactly Vector getActiveUsers(String token, boolean viewAll) returns?

    The documentation says "returns all registered users". In my tests it is only returning 1000 users which is exactly the size of my users cache.

    What's the difference between "active users", "registered users" and "cached users"?

    And what is the parameter viewAll for?

    1. Hi,

      If the method is supplied with viewAll = true, then it will give you all users including the users who do not have a "can use" Permission which means all the active users. but if you supply viewAll = false, then it will give you a registered user which means that the users who have "can use" permission. Cache user is a user object being cached in Confluence cache, if the user just being used (i.e login to Confluence). Confluence will cache the object.

      You can see the API of the following classes for reference:

      • DefaultUserAccessor
      • UserSoapService

      Cheers,

      1. Thanks for the explanation, Arie. Still, the method doesn't give me all users even with vieAll=true. It only gives me 1000, though I have a total of 1200 users. What I was saying is that I believe the method is only able to return as many users as the size of the users cache. I am assuming that because my users cache is set to 1000. So, my conclusion is that getActiveUsers has a limitation, which is the size of the users cache. Does it make sense?

        I think this is either a bug or this limitation should be properly documented.

        1. I confirm what Anton is saying, still a bug/undocumented 2 years on. The soap service reports 2825 active(false) users whereas the number is 5.5k, and 5.3k active(true)  users whereas it should be > 9k. Makes these methods pretty much useless for anything except toy installations.

  83. Anonymous

    Here at a Quebecois university, many of our page titles have accents.  As a result, any page titles that have accents have very ugly urls in the form of http://<server>/pages/viewpage.action?pageId=131165 for example,  rather than http://<server>/display/<Space>/RegularTitle. Is there an option somewhere to have regular "display" page urls with accents?

    Carmine

  84. Anonymous

    Has anyone a how-to for performing a space import witch python ?
    thanks

    1. Anonymous

      i need an example for an import with python too.

      1. This should be fairly doable, looking into it now. Hopefully have something to share today/tomorrow.

        1. Ok got it.

          A couple caveats for my own protection. I'm not sure/haven't tested what happens when you try to import a space and it already exists, so you might want to take caution with that. My test worked with a small import, not sure what's going to happen with larger imports. I do plan on integrating this to my other applications, Confluence Remote Manager and Confluence Command Line this weekend. Lemme know if you have any issues or questions, I'm glad to try to help.

          1. Anonymous

            it works fine, thanks.

            i need it to sync two wikis.

            now it works, but all data in the function '

            Recently Updated

            ' become ignored.

            any idea for a alternativ solution? we use confluence 2.8 at the moment

          2. Anonymous

            it works fine, thanks.

            i need it to sync two wikis.

            now it works, but all data in the function '{recently-updated}' become ignored.

            any idea for a alternativ solution? we use confluence 2.8 at the moment

            1. Anonymous

              on a manual import, could i say, to build a Index.

              have the remote API this option ?

              1. Not that I know of, believe you'll have to do that manually.

  85. Anonymous

    how i can build it manually ? on the webinterface or in use with the remote API ?

    1. You can rebuild the index manually in the Administration Console.

  86. Anonymous

    Is there any way to restore deleted page with remote API?

    I can remove it with removePage command, but can't restore?

    1. I accomplish this by creating a space called Trash and making it visible to only the admin. Then rather than removing a page with the remote API, I move it to the Trash.  Then should I need to rollback a deletion, the page is still accessible.

      When I am satisfied that I no longer need it, I remove the page from the Trash space.

      Hope that helps.

  87. Anonymous

    How can i set\get child position for page?

    1. The parent ID will be returned in the data structure when you retrieve a page. For instance (in python):

      If you needed to create a page as a child, you'd have to first get the ID of the page you want you want to append a child to. So for instance, if I wanted a child of the Demo's Home page, I'd set parentId to '32792'.

      1. Anonymous

        I mean position of pages on ONE level. I have 3 child-pages with titles "Title1", "Title2", "Title3". They render in Tree of content in same sequence - "Title1", "Title2", "Title3". And i want to change this sequence. "Title2", "Title3", "Title1".

        Confluencedb have child_position field for this data.

  88. Still some lights on attachment management through xml-rpc

    Imagine I need to download all .doc attachments from a space...

    In few minutes I was able to corretly login, then search for all doc attachments so I would just call the method:

    The problem here is that I have no way to get the pageId from the search query results:

    (look at the Search Result structure)

    The only possible solution I see is parsing the url of the attachment where I can see the pageId it belongs.

    Any suggestions?

    The API is nearly perfect browsing form the Page concept but starting from a search query, it becomes pretty useless (IMHO)

    Digging again into the documentation the solution would be having a sort of:

    or

    In this way, the sequence would be:

    • from the Search Result structure I can have attachment fileName (title) or attachmentId.
    • from the attachmentId I i get the full attachment info with the pageId it belongs
    • With the pageId I can download the attachment (big grin)
    1. Seeing replies on the forums, there's no way to accomplish a so simple task through the API.

      Tha only way is using the Confluence Attachment Download plugin or manually parsing the url of attachment.

      Such a shame.

      Bye

  89. Anonymous

    Hi,

    We have our application on confluence2.8.2. We are testing some feeds and we have the URL "https://hostname:port/rpc/xmlrpc".

    When I give this URL, the following error is being thrown in the alassian logs. We are not giving any input to the xmlrpc to read. Please advise to fix this issue.

    2009-03-12 11:13:24,407 ERROR [TP-Processor183] [confluence.rpc.xmlrpc.XmlRpcServer] serviceXmlRpcRequest Exception servicing XML-RPC request: org.apache.xmlrpc.ParseFailed: Premature end of file.
     -- url: /rpc/xmlrpc | userName: jabir.mahammad
    org.apache.xmlrpc.ParseFailed: Premature end of file.
            at org.apache.xmlrpc.XmlRpcRequestProcessor.decodeRequest(XmlRpcRequestProcessor.java:69)
            at org.apache.xmlrpc.XmlRpcWorker.execute(XmlRpcWorker.java:143)
            at org.apache.xmlrpc.XmlRpcServer.execute(XmlRpcServer.java:139)
            at org.apache.xmlrpc.XmlRpcServer.execute(XmlRpcServer.java:114)
            at com.atlassian.confluence.rpc.xmlrpc.XmlRpcServer.serviceXmlRpcRequest(XmlRpcServer.java:111)
            at com.atlassian.confluence.rpc.xmlrpc.XmlRpcServer.service(XmlRpcServer.java:85)
            at com.atlassian.confluence.servlet.SpringManagedServlet.service(SpringManagedServlet.java:64)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
            at com.atlassian.core.filters.ServletContextThreadLocalFilter.doFilter(ServletContextThreadLocalFilter.java:21)

    1. Please ensure that your URL address is correct and ensure the code is running well by running the code to point the xmlrpc client to our site (http://confluence.atlassian.com). In order to use the service of http://confluence.atlassian.com, you need to have an account there, thus you need to sign up if you dont have any account.

      and if the problem still persists. Please create an issue in our support system.

      Cheers,

  90. Guys,

    What's the easiest(less load on the server wise) way to get Top Pages in the given Space ?

    I have tried:

    • GetPages
    • then loop through them and find out if parentid =0.

    I need this for my Page Manager for Confluence app. (to move pages around)

    1. A workaround which I can think of is by creating a page contains pagetree macro and then you download the page and extract it. Thus, the detail steps maybe as follow:

      1. Create a page contains the following wiki markup (You can do this using remote service):
        {pagetree:root=@none}
        
      2. Download the page which contains the above wiki markup
      3. Extract the HTML markup to grab the list of orphaned pages. This part maybe a bit tricky to be done.

      Kind Regards,
      Arie

      1. Thanks Arie,

        sounds doable (compared to waiting for 3000 page summary to load & go through).

  91. I am using visual studio.net 2008 to generate a proxy to the remote api access point on my QA wiki (version 2.8.0). I can generate the proxy, but when I run the program I get this error:

    The exception happens inside the login method; I am not calling that method. As I peruse the wsdl generated by my site, I see this:

    a method or body name renderContent. Any idea why that may be happening?

    1. Hi,

      I am not really sure on your code, but I use the following steps to get my C#.net works to consume Confluence web service:

      1. Create proxy of Confluence Soap service using Wsdl.exe tool
      2. Create dll file of the created-proxy from the above step
      3. Use the following code:
        ConfluenceSoapServiceService soapService = new ConfluenceSoapServiceService();
                    String token = soapService.login("admin", "arie");
                    RemoteServerInfo serverInfo = soapService.getServerInfo(token);
                    Console.WriteLine("this is my baseUrl: "+serverInfo.baseUrl);
        

      I hope that helps.

      Cheers,

    2. I got similar error with following C#-code:

      The error inside wcf-proxy's login method :
      InvalidOperationException: "RPC Message searchRequest1 in operation search1 has an invalid body name search. It must be search1

      1. I solved my own problem shortly after I posted this question, but did not find the time to udpate the community. It was not a coding problem at all but a configuration problem. I had assumed I could use a Service Reference to consume the service. This was of no use. I then read somewhere that the .NET proxy generator would not handle this correctly unless you chose a Web Reference. Once I did this I was good to go.

        I have started to create a wrapper class around the registration components. I found it useful to create a slightly higher level abstraction to accomplish some tasks. For example add a user to Confluence, as far as I understand it, is a matter of adding a valid user in a directory to the confluence-users group. For this reason I created a method AddConfluenceUser that does just that. The wrapper class also stores the Logon token in a private member for reference whenever a method is called.

        This is a work in progress and does not cover the entire library.

        1. Microsoft has two stacks for working with WebServices on client side:

          • wsdl.exe - was created for .NET 1.x/2.0 ASP.NET (ASMX) web services
          • SvcUtil.exe - was created for .NET 3.0 and followings
            I guess wsdl.exe is depricated now. But, it produces correct proxies for confluence's wsdl.
            SvcUtil.exe stumbles a bit on the wsdl from atlassian. I have no strong understanding what's wrong but have found a way to fix.

          After we generate proxies from the wsdl we get something like this:

          The problem is with WrapperName for the second message contract. Instead of:
          [System.ServiceModel.MessageContractAttribute(WrapperName="searchResponse"
          it should be:
          [System.ServiceModel.MessageContractAttribute(WrapperName="search*1*Response"

          After I manually fix all message contract it works fine.

  92. Anonymous

    Hi
    I am trying to generate client stubs for remote SOAP API and I am getting the following error.Has anybody did generate stubs ?

    wsdl2java -uri http://wikicentral.cisco.com/confluence/rpc/soap-axis/confluenceservice-v1?wsdl -d xmlbean
    error is below
    Using AXIS2_HOME: C:\axis2-1.4.1
    Using JAVA_HOME: C:\Program Files\Java\jdk1.5.0_18
    Retrieving document at 'http://wikicentral.cisco.com/confluence/rpc/soap-axis/co
    nfluenceservice-v1?wsdl'.
    ERROR Part 'fault' of fault message '

    Unknown macro: {[http}

    InvalidSessionException' must be defined with
    'element=QName' and not 'type=QName'
    ERROR Part 'fault' of fault message '

    Unknown macro: {[http}

    InvalidSessionException' must be defined with
    'element=QName' and not 'type=QName'
    org.apache.axis2.AxisFault: Part 'fault' of fault message '

    Unknown macro: {[http}

    InvalidSessionException'
    must be defined with 'element=QName' and not 'type=QName'
    at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.addQNameRefer
    ence(WSDL11ToAxisServiceBuilder.java:1245)
    at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateBindi
    ng(WSDL11ToAxisServiceBuilder.java:776)
    at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateEndpo
    int(WSDL11ToAxisServiceBuilder.java:538)
    at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateEndpo
    ints(WSDL11ToAxisServiceBuilder.java:489)
    at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateServi

  93. You're using overloads for operations:

    But, it's not supported (at least) by .NET Framework 3.0/3.5. I guess it'd be much better to give distinct names for such operations (getPage and getPageById for example).

    1. Hi,

      Thanks for the suggestion, you can easily change it and recompile the jar file. But, you need to have Confluence source to get it. You need to change the method's name of the following classes:

      • ConfluenceSoapServiceImpl
      • ConfluenceSoapService

      Or else, you can raise an improvement request to our JIRA on regard of this matter:

      Cheers,

  94. Anyone know if the new stuff in Confluence 3.0 is accessible via the remote API. Mainly interested in the status updates and such. Didn't see any mention of them in the docs above, curious if anyone else has tried it.

    1. Hi,

      I am sorry the features in Confluence 3.0 dont get implemented much in Remote API. All of remote API for Confluence 3.0 is documented here and not many changes being made. Perhaps, you want to raise a feature request in Atlassian's JIRA:

      Cheers,

      1. Thanks for the advice. I've created said issue: http://jira.atlassian.com/browse/CONF-16129, as a low priority feature request of course. Just thought it'd be cool if I could interact with status updates remotely. It'd allow us to potentially make more use of status updates, and nix stuff like yammer (smile)

      2. There is a patch available on issue CONF-15482@jira which allows you to update user status via the Remote API.

        1. Thanks for the update! Greatly appreciated. Will this patch be in future releases, or will this patch be required for awhile?

          1. I don't know what the current plans are - best thing to do is to watch that issue for updates.

  95. Anonymous

    Hi,

    We have our Confluence running on HTTPS and whenever we try to generate a wsdl with 'https://<confluence-install>/rpc/soap-axis/confluenceservice-v1?wsdl' it generates a faulty one using 127.0.0.1:8080 as address.

    How can we get a proper working one over https? Anything we have to open up on the server or a maybe work-around?

    Thanks,

    Rob

    1. Hi,

      Could you please ensure that Confluence uses port 8080 for https? By default Confluence uses port 8080 for http and use 8443 for https. Please check on your server.xml.
      If you find the following entries in your server.xml, it means that the number specified in ???? is the port number that you need to use to access https:

      <Connector port="????" maxHttpHeaderSize="8192"
                         maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                         enableLookups="false" disableUploadTimeout="true"
                         acceptCount="100" scheme="https" secure="true"
                         clientAuth="false" sslProtocol="TLS"
                         URIEncoding="UTF-8" keystorePass="kasihku"/>
      

      While the following connector is meant for http instead of https.

      <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8271" minProcessors="5"
                         maxProcessors="75"
                         enableLookups="false" redirectPort="8444" acceptCount="10" debug="0" connectionTimeout="20000"
                         useURIValidationHack="false" URIEncoding="UTF-8"/>
      

      Again, please ensure that you have specified the right connector. Or you can raise a support ticket to our SAC:

      Cheers,

  96. hi

    I have a confluence instance and I am the confluence adminitrator.
    I am trying to move a page from one space to another page of same space using SOAP API. the space is also created by me
    I am getting
    com.atlassian.confluence.rpc.NotPermittedException: You do not have the permissions to perform this action
    what could be the problem?

    1. Hi there,

      Sorry if this is a little late. I would say that this is unusual, in case you still have the problem, I would suggest checking:

      • If you really are a member of "confluence-administrators" group. If you belong to this group, there should not be any issues with the permission
      • If the same problem occurs in a test space. If it does, please contact support

      Cheers,
      Azwandi

      1. Hi

          thanks for your reply. The problem was solved. the problem  was with the value passed to the parameter "position", I have passed wrong value. Once I pass the correct value it is working fine.

        1. Anonymous

          What is a 'correct' value??

          1. Anonymous

            replying to self: just found out from here http://confluence.atlassian.com/display/CONFDEV/Remote+API+Specification#RemoteAPISpecification-Pages

            position - "above", "below", or "append". (Note that the terms 'above' and 'below' refer to the relative vertical position of the pages in the page tree.)

  97. Is anyone having trouble with Search working with Confluence 3.0??

    I have a script that was using XML-RPC to perform search in Confluence 2.8 - now it won't work in Confluence 3.0.

    I'm getting this in the error log:

    REMOTE ERROR: java.lang.NoSuchMethodException: $Proxy211.search(java.lang.String, java.lang.String)

    ...has anyone else had a problem with search in Confluence 3.0?

    Thanks,

    -Greg

    1. Hi Greg,

      Based on the error message, it seems that there is one parameter missing (I suppose the maxResults). The method requires three parameters (or four, please check the specs above):

      Vector search(String token, String query, int maxResults)

      I have tested this against a 3.x instance, you might want to review your code in case something is missing. You can also try Atlassian Answers for further assistance.

      Cheers,
      Azwandi

  98. is anyone having problem with the XMLRPC server in Confluence 3.0.2 refusing connections?

    I tested the connection with a simple python script,

    try:
      s = xmlrpclib.Server(confluence_url, verbose=True)
      token = s.confluence1.login(admin_username, admin_password)
    except xmlrpclib.Fault, f:
      print "Login Error"
      sys.exit()
    

    and I'm getting the following errors:

     $ python test_rpc.py
     Traceback (most recent call last):
       File "rpc.py", line 13, in ?
         token = s.confluence1.login(admin_username, admin_password)
       File "/usr/usc/python/2.4.2/lib/python2.4/xmlrpclib.py", line 1096, in  __call__
         return self.__send(self.__name, args)
       File "/usr/usc/python/2.4.2/lib/python2.4/xmlrpclib.py", line 1383, in  __request
         verbose=self.__verbose
       File "/usr/usc/python/2.4.2/lib/python2.4/xmlrpclib.py", line 1129, in  request
         self.send_content(h, request_body)
       File "/usr/usc/python/2.4.2/lib/python2.4/xmlrpclib.py", line 1243, in  send_content
         connection.endheaders()
       File "/usr/usc/python/2.4.2/lib/python2.4/httplib.py", line 795, in  endheaders
         self._send_output()
       File "/usr/usc/python/2.4.2/lib/python2.4/httplib.py", line 676, in  _send_output
         self.send(msg)
       File "/usr/usc/python/2.4.2/lib/python2.4/httplib.py", line 643, in  send
         self.connect()
       File "/usr/usc/python/2.4.2/lib/python2.4/httplib.py", line 1069, in  connect
         sock.connect((self.host, self.port))
       File "<string>", line 1, in connect
     socket.error: (146, 'Connection refused')
    
  99. Hi,

    Space import is not working for me. Could you please provide me sample perl code to import space xml backup? Can I import from space xml backup to confluence running on remote machine?

    Regards,

    PG

    1. It isn't working for me either.

      I tried on versions 2.10 and 3.2 and neither work (using space exports from the same major release to same major release)

      Is importSpace working for anyone at the moment?

  100. Subject: changing 'comment' field for attachment

    I have searched the remote api spec for an approach to change the
    comment field on an attachment.

    These tools all seem to refer to page comments:

    • Vector getComments(String token, String pageId) - returns all the
      comments for this page.
    • Comment getComment(String token, String commentId) - returns
      an individual comment.
    • Comment addComment(String token, Comment comment) - adds a comment to the page.
      --mynote: Is above a typo?: "Comment comment". What should it read?
    • boolean removeComment(String token, String commentId) - removes a
      comment from the page.


    No help here that I see:

    Attachments - new in version 2.0
    --snip
    Management

    • Attachment addAttachment(String token, long contentId,
      Attachment attachment, byte[] attachmentData) - add a new
      attachment to a content entity object.
      --snip
    • boolean removeAttachment(String token, String contentId, String
      fileName) - remove an attachment from a content entity object.
    • boolean moveAttachment(String token, String originalContentId,
      String originalName, String newContentEntityId, String newName) -
      move an attachment to a different content entity object and/or
      give it a new name.

    Please let me know how to use the API to add or modify
    a comment on an attachment.


    thanks/regards,
    Tom

  101. The biggest problem I have with the WSDL is that there are no comments to describe the input parameters and no documentation of the same. Are you afraid that your user base will decline from your UI if you expose these features?

    I'll tell you what! If you let me know what each of the input parameters on the WSDL mean, I will be more than happy to update your WSDL to include that information in a description so that you don't have to rework your interface contract and then I will return it to you for publication.

    I am seriously unhappy (sad)

  102. I have written a short tutorial how to create a Confluence SOAP client using the axistools maven plugin - perhaps this can be of help for some ppl: http://www.hascode.com/2010/03/how-to-build-a-confluence-soap-client-in-5-minutes/

  103. Anonymous

    Hi,

    Trying to use the addAttachment API through XMLRPC, but for the life of me I cannot figure out how to send the actual attachment. The API defines a byte[], but what should I send in the XMLRPC call?

    Should it be a base64 encoded string? Or an array of bytes? And if the latter: what should the type of the entries in the Array be? "int'? "string"? Something else?

    Just need a little pointer here to get going...

    P

    1. Anonymous

      Figured it out: it should be a base64 node in the xmlrpc request, containing a base64 encoded string of the content.

      Guess I never got all the differrent variables lines up corrently, before I finally got it working properly.

      P

  104. Anonymous

    Hi,

    I am trying to add/update many files via XMLRPC/Python. With a for loop I run through a directory and try to upload the content of the files. But I get the following error: xmlrpclib.ResponseError: ResponseError().

    If I upload every file seperate it will work. Does anyone knows if I have to close any connection before I upload the next file, or any other clue?

    Kind regards and thanks in advance.

  105. Anonymous

    I am trying to use the addGlobalPermissions method of the webservice.

    One of the parameters is a vector of strings representing the permissions.

    The problem is I can't find any documentation regarding the list of strings you can use

    to represent the different types of global permissions.

    Basically, I'm looking for a table similar to the "Space permissions" table listed on this

    page, but for "Global permissions" instead.

    Can anyone help me out?

    In particular, I'm looking for the string that corresponds to the "can use" checkbox on the

    Global Permission page.

  106. Anonymous

    There's no Delphi example(s) available so I had to do it myself ;).

    addAttachment Delphi-example:

    greetings from Finland: Arto L.

  107. As far as I can tell, the parameters parameter of the search(string,string,Map,int) method doesn't seem to work. I have implemented this code:

    search confluence code

    However, the "modified" parameter doesn't seem to make a difference. If I change the query to "?" instead of "test", then I get an exception that says it is not valid. The exception shows that the "lastModified" criteria isn't getting set correctly. Also, I have tried all other parameters (such as the "type" parameter). None of them make a difference to valid search results, and when the exception shows, none of the criteria exception "query" ends up getting set.

    Anyone have any idea why it doesn't work?

  108. Anonymous

    Any way to import Word Documents via remote API?

  109. Anonymous

    Greetings Community,

    I do sincerely apologise in advance if this is not very "ethical" to do but...

    Could someone take a look at my post on the confluence dev forum?

    It's about a method to keep the position of a page relative to an other, and pageMove is not working...

    Thanks for any help

    K.

    1. Anonymous

      SOLVED!

      See the Forum link in my prior post to know the answer ;-)

  110. I'm using the com.atlassian.xmlrpc package to interact with the Confluence XML-RPC interface, and there seems to be a bug somewhere (not sure yet if it's on the server side, or the client side), but calling getPage(String,String,String) is returning proper XML, containing a field such as:

    However, the atlassian xmlrpc client is generating a NullPointerException:

    Caused by: java.lang.NullPointerException
    	at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2026)
    	at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:1996)
    	at java.util.Calendar.setTimeInMillis(Calendar.java:1109)
    	at java.util.GregorianCalendar.<init>(GregorianCalendar.java:576)
    	at java.util.Calendar.createCalendar(Calendar.java:1011)
    	at java.util.Calendar.getInstance(Calendar.java:963)
    	at org.apache.xmlrpc.util.XmlRpcDateTimeFormat.parseObject(XmlRpcDateTimeFormat.java:135)
    	at org.apache.xmlrpc.util.XmlRpcDateTimeDateFormat.parseObject(XmlRpcDateTimeDateFormat.java:29)
    	at java.text.Format.parseObject(Format.java:226)
    	at org.apache.xmlrpc.parser.DateParser.setResult(DateParser.java:42)
    	at org.apache.xmlrpc.parser.AtomicParser.endElement(AtomicParser.java:56)
    	at org.apache.xmlrpc.parser.RecursiveTypeParserImpl.endElement(RecursiveTypeParserImpl.java:96)
    	at org.apache.xmlrpc.parser.MapParser.endElement(MapParser.java:190)
    	at org.apache.xmlrpc.parser.RecursiveTypeParserImpl.endElement(RecursiveTypeParserImpl.java:96)
    	at org.apache.xmlrpc.parser.XmlRpcResponseParser.endElement(XmlRpcResponseParser.java:205)
    	at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    	at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    	at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
    	at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    	at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:175)
    	at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:145)
    	at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:94)
    	at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:53)
    	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:166)
    	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:157)
    	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:146)
    	at com.atlassian.xmlrpc.RPCCallMethodInterceptor.invoke(RPCCallMethodInterceptor.java:62)
    	... 61 more
    

    Anyone seen this, and/or know how to fix it? Is it a problem with the client (machine, my code, client library), server, user preferences of the user logging in, ..? I don't see a timezone in the XML iso8601 timestamp, but I'm not sure if that is really the problem, and if it's something I can work around somehow.

  111. Anonymous

    Any idea how to set the telephone number of a user?

    As I understood, the Phone number is the Entity_key confluence.user.profile.phone of OS_PROPERTYENTRY. But the UserInformation object does not contain the phone number.

    Dennis

  112. Just wanted to mention that the default search query for the search methods has to be in lucene search query format, so if you want to search everything in the index then its ":"

  113. Hi,

    We are using confluence v2.9 for our company and i am developing a desktop application to manage attachments in one of the spaces.

    The requirement is to get the attachment and save it locally.  But i am getting the following exception (java.lang.NullPointerException.

    The code i used is:

    The above line generates exception..  however, if i call the getAttachment() api, its working fine.

    Both the above functions have the same parameters to be passed.  So i believe, the parameters i sent should be correct.  Only when i attempt to get attachment contents, i am getting the exception..

    Can any one help me?

    1. Anonymous

       var documentByteArray = _service.getAttachmentData(_token.ToString(),"PageID","PageName", version)

                                                                      

                      try

                      {

                        

                          File.WriteAllBytes("Save Locationpath: , documentByteArray);

                        

                      }

       

      You can download file from confluence server using above code sample

  114. Hi,

    I tried the same with python script.  Still getting the NullPointer Exception.

    The python code i used is given below.

    Could any one help pls.

    1. Did you check the parameters?  I mean the datatype of the parameters passed

  115. Hello,

    I'm having a problem using movePage:

    java.lang.NoSuchMethodException: $Proxy64.movePage(int, int, java.lang.String)

    or

    java.lang.NoSuchMethodException: $Proxy64.movePage( java.lang.String,  java.lang.String, java.lang.String)

    I'm using Ruby xml/rpc. Other calls such as getPage, storePage work fine.

    RPC logic:

    Any insight would be much appreciated. 

    Thanks,
    Sonny

  116. Anonymous

    Is there any functionality to get notified about new pages (not new revisions), new spaces or all modifications (add/modify/delete) that are done by some or all users? Background of the question: a companies knowledge is usually spread over many systems so information integration systems (IIS) integrate information form different systems into one, e.g. to have a central point for querying all systems. To keep the IIS up to date, one needs to push all updates in the sources to the IIS - so my question is does confluence provides such a functionality (e.g. publish-subscribe) or does a IIS has to poll confluence periodically to get recent updates? Thanks!

  117. I am missing the changes in DateRangeEnum from Confluence 3.0 to the newer versions in this documentation. If you're using Confluence > 3.0 you're not able to use the RPC search method with the "modified" parameter and a value of "TODAY" or "YESTERDAY" as stated above.

    For comparison, take a look at the enum's javadocs ..

  118. The new 3.5 APIs are nice (smile).

    1. trash - these are useful for automated cleanup, but still missing date the item was added to the trash (core function)
    2. watches - great this can be done for another user id for pages. Why not spaces too??? The other missing part is no way to remove watches.
    1. I can't seem to find anything regarding the new 'Space Categories'. I'd like to set this 'special label' upon space creation.

      Cheers!

      1. I tried via a simple groovy script and the trick is to prefix the label with "team:" like so:

        c.confluence1.addLabelByNameToSpace( token, "team:mycat", spacekey )

        -T

  119. Anonymous

    Hi ,

           I need to do importspace Using confluence Remote API .

           But currently i'm using confluence-SOAP 0.7.jar (client jar) .it doesnot hold the implementation for the ' importspace 'method in the ConfluenceSoapServiceImpl.java

    it has got only inplementation for the exportspace() method .

    Please suggest me the jarfile which has got the implentationfor the importspace and where to download the jar.

  120. There is a Data Object called "RSS Feed" that I do not see it used anywhere in this documentation page. So either someone forgot to document the call that uses it as parameter and such call does not exist (which I doubt), because having to fetch all blog entries using getBlogEntries() to select the 10 most recent after the retrieval is not very efficient when the number of posts is very large.

    I'll deeply appreciate a comment from someone at Atlassian about this.

    Cheers.

    1. Anonymous

      Hello,

      I think we have the same problem.

      I am searching for a method to demand all BlogEntries of a specific page from the last X days. Currently I demand all BlogEntries with getBlogEntries(...) and sort them out.

      But as you say, this request can be very huge and take a few seconds.

  121. Anonymous

    Hello.

    I'm currently working on a C# wrapper for the WSDL since the generated wrapper is really bloated. But that all works fine, but I would like to hear if there was some further documentation somewhere, firstly it seems that this is not 100% up to date... (some objects has a Permission attribute/field but it is not described under the objects here, instead there is a locks field described which my objects does not have)...

    Another thing, is there any documentation for the objects for what is relevant to be able to modify from the clients perspective, there is quite a few fields where i feel that these are something confluence is in charge off (like Page.Created and so on)... Obviously I wan't to wrap these away so they are read-only to the consumer of the API.

    I Know this all generates just another layer on top of the current auto generated wrapper, but adding documentation, making things read-only that should only be modified by confluence, storing the client token so the consumer does not need to concern him self about that and so on seems to be worth it.

    1. there is quite a few fields where i feel that these are something confluence is in charge off (like Page.Created and so on)... Obviously I wan't to wrap these away so they are read-only to the consumer of the API.

      In my experience, you don't need to wrap read-only fields like Created because Confluence simply won't let you update that field through the core Remote API.

      1. Anonymous

        While that is properly true, I don't consider that to be good to allow the consumer to set those properties when it does not have any affect, I would rather have the consumer say "Hey this is read only, so that's something I don't have to worry about".

        It comes down to usability where I wan't to reflect what makes sense to modify and what does not, since that is what i personally would consider a clean API.

        1. Fair enough.

          re: The original request for "is there more documentation"
          As it happens, this is pretty much it.

          re: Some thoughts on details about what is modifiable

          • If you read the "storePage" description under the #Pages section, it describes which fields are writable vs. readable for the Page object. You may want to double check the write-style methods for the other objects to see if the details happen to be hidden in there.
          • Creator, Modifier, Created, and Modified are read-only unless you install a plugin like the UDMF and use the entry points the plugin exposes.
          • For reference, if you're feeling its worth it, you could examine the Java variant of this idea: Confluence Remote Java Wrapper. It's kind of messy, since we've mostly just added methods as needed. I don't know that it would have any of the thoroughness you're really looking for, but perhaps you might find it useful.
          • You may find certain details are best described by just examining the source. If you have a confluence license, you should be able to download source from your my.atlassian.com login.

          Good luck!
          Laura

  122. Anonymous

    When consuming the v2 of the Confluence WSDL, calling "getPages" it does not allow the getPagesResponse to map back to the expected object for each page found? The Confluence Server is running on v5.1.2

     

    Tibco BW is the web client and its stack trace is as follows ->

     

    <StackTrace>Job-15000 Error in [ConfluenceInterface/BackendServices/ConfluenceSoapServicegetPages.process/SOAPRequestReply]
    Output data invalid
    at com.tibco.pe.core.TaskImpl.a(Unknown Source)
    at com.tibco.pe.core.TaskImpl.eval(Unknown Source)
    at com.tibco.pe.core.Job.a(Unknown Source)
    at com.tibco.pe.core.Job.k(Unknown Source)
    at com.tibco.pe.core.JobDispatcher$JobCourier.a(Unknown Source)
    at com.tibco.pe.core.JobDispatcher$JobCourier.run(Unknown Source)
    caused by: org.xml.sax.SAXException: validation error: unexpected content "parentId"; expected "permissions" ({com.tibco.xml.validation}COMPLEX_E_UNEXPECTED_CONTENT) at /getPagesResponse[1]/getPagesRetu