You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2018/01/26 07:46:32 UTC

[camel] branch master updated (ffd3eb4 -> daa882b)

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from ffd3eb4  CAMEL-12185 - Update Javadoc to reflect docs
     new 316ba67  CAMEL-12183: add support for Wordpress REST API
     new daa882b  CAMEL-12183 - Fixed test log4j2 configuration and regen

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 apache-camel/src/main/descriptors/common-bin.xml   |    2 +
 bom/camel-bom/pom.xml                              |   10 +
 components/camel-wordpress/pom.xml                 |  110 +++
 .../src/main/docs/wordpress-component.adoc         |  113 +++
 .../component/wordpress/WordpressComponent.java    |   87 ++
 .../wordpress/WordpressComponentConfiguration.java |  162 +++
 .../component/wordpress/WordpressEndpoint.java     |  157 +++
 .../wordpress/api/WordpressAPIConfiguration.java   |   89 ++
 .../wordpress/api/WordpressConstants.java          |   26 +
 .../wordpress/api/WordpressServiceProvider.java    |   94 ++
 .../api/auth/BaseWordpressAuthentication.java      |   57 ++
 .../api/auth/WordpressAuthentication.java          |   35 +
 .../api/auth/WordpressBasicAuthentication.java     |   53 +
 .../component/wordpress/api/model/Category.java    |   40 +
 .../wordpress/api/model/CategoryOrderBy.java       |   21 +
 .../api/model/CategorySearchCriteria.java          |   46 +
 .../component/wordpress/api/model/Classifier.java  |  109 +++
 .../api/model/ClassifierSearchCriteria.java        |   64 ++
 .../component/wordpress/api/model/Comment.java     |  215 ++++
 .../wordpress/api/model/CommentOrderBy.java        |   21 +
 .../wordpress/api/model/CommentSearchCriteria.java |  157 +++
 .../wordpress/api/model/CommentStatus.java         |   21 +
 .../component/wordpress/api/model/Content.java     |   76 ++
 .../component/wordpress/api/model/Context.java     |   24 +
 .../wordpress/api/model/DeletedModel.java          |   47 +
 .../component/wordpress/api/model/Format.java      |   26 +
 .../camel/component/wordpress/api/model/Media.java |   27 +
 .../camel/component/wordpress/api/model/Order.java |   24 +
 .../camel/component/wordpress/api/model/Page.java  |   52 +
 .../component/wordpress/api/model/PageOrderBy.java |   24 +
 .../wordpress/api/model/PageSearchCriteria.java    |   69 ++
 .../component/wordpress/api/model/PingStatus.java  |   24 +
 .../camel/component/wordpress/api/model/Post.java  |  101 ++
 .../wordpress/api/model/PostCommentStatus.java     |   24 +
 .../component/wordpress/api/model/PostOrderBy.java |   26 +
 .../wordpress/api/model/PostRevision.java          |   87 ++
 .../wordpress/api/model/PostSearchCriteria.java    |   80 ++
 .../component/wordpress/api/model/Publishable.java |  115 +++
 .../api/model/PublishableSearchCriteria.java       |   99 ++
 .../wordpress/api/model/PublishableStatus.java     |   49 +
 .../wordpress/api/model/SearchCriteria.java        |   92 ++
 .../camel/component/wordpress/api/model/Tag.java   |   27 +
 .../component/wordpress/api/model/TagOrderBy.java  |   21 +
 .../wordpress/api/model/TagSearchCriteria.java     |   48 +
 .../component/wordpress/api/model/Taxonomy.java    |  120 +++
 .../wordpress/api/model/TextPublishable.java       |  167 ++++
 .../camel/component/wordpress/api/model/User.java  |  211 ++++
 .../component/wordpress/api/model/UserOrderBy.java |   21 +
 .../wordpress/api/model/UserSearchCriteria.java    |   75 ++
 .../api/service/WordpressCrudService.java          |   45 +
 .../wordpress/api/service/WordpressService.java    |   33 +
 .../api/service/WordpressServiceCategories.java    |   24 +
 .../api/service/WordpressServiceComments.java      |   24 +
 .../api/service/WordpressServicePages.java         |   27 +
 .../api/service/WordpressServicePostRevision.java  |   31 +
 .../api/service/WordpressServicePosts.java         |   35 +
 .../api/service/WordpressServiceTags.java          |   23 +
 .../api/service/WordpressServiceTaxonomy.java      |   29 +
 .../api/service/WordpressServiceUsers.java         |   23 +
 .../impl/AbstractWordpressCrudServiceAdapter.java  |   89 ++
 .../impl/AbstractWordpressServiceAdapter.java      |   81 ++
 .../impl/WordpressServiceCategoriesAdapter.java    |   67 ++
 .../impl/WordpressServiceCommentsAdapter.java      |   67 ++
 .../service/impl/WordpressServicePagesAdapter.java |   88 ++
 .../service/impl/WordpressServicePostsAdapter.java |   97 ++
 .../service/impl/WordpressServiceTagsAdapter.java  |   67 ++
 .../impl/WordpressServiceTaxonomyAdapter.java      |   49 +
 .../service/impl/WordpressServiceUsersAdapter.java |   70 ++
 .../impl/WordpressSevicePostRevisionAdapter.java   |   57 ++
 .../wordpress/api/service/spi/CategoriesSPI.java   |   73 ++
 .../wordpress/api/service/spi/CommentsSPI.java     |   79 ++
 .../wordpress/api/service/spi/PagesSPI.java        |   79 ++
 .../api/service/spi/PostRevisionsSPI.java          |   55 ++
 .../wordpress/api/service/spi/PostsSPI.java        |   85 ++
 .../wordpress/api/service/spi/TagsSPI.java         |   67 ++
 .../wordpress/api/service/spi/TaxonomySPI.java     |   42 +
 .../wordpress/api/service/spi/UsersSPI.java        |   73 ++
 .../consumer/AbstractWordpressConsumer.java        |   87 ++
 .../wordpress/consumer/WordpressPostConsumer.java  |   68 ++
 .../wordpress/consumer/WordpressUserConsumer.java  |   67 ++
 .../producer/AbstractWordpressProducer.java        |   69 ++
 .../wordpress/producer/WordpressPostProducer.java  |   56 ++
 .../wordpress/producer/WordpressUserProducer.java  |   49 +
 .../wordpress/proxy/WordpressOperationType.java    |   40 +
 .../src/main/resources/META-INF/LICENSE.txt        |    0
 .../src/main/resources/META-INF/NOTICE.txt         |    0
 .../services/org/apache/camel/component/wordpress  |   18 +
 .../src/main/resources/log4j.properties            |   32 +
 .../wordpress/WordpressComponentTest.java          |   56 ++
 .../wordpress/WordpressComponentTestSupport.java   |   44 +
 .../wordpress/WordpressPostOperationTest.java      |  123 +++
 .../wordpress/WordpressTestConstants.java          |   28 +
 .../wordpress/WordpressUserOperationTest.java      |  119 +++
 .../wordpress/api/model/PublishableStatusTest.java |   48 +
 .../impl/WordpressServicePostsAdapterTest.java     |   72 ++
 .../WordpressServiceCategoriesAdapterIT.java       |   64 ++
 .../ignored/WordpressServiceCommentsAdapterIT.java |   64 ++
 .../ignored/WordpressServicePagesAdapterIT.java    |   62 ++
 .../WordpressServicePostRevisionAdapterIT.java     |   73 ++
 .../ignored/WordpressServiceTagsAdapterIT.java     |   64 ++
 .../ignored/WordpressServiceTaxonomyAdapterIT.java |   58 ++
 .../ignored/WordpressServiceUsersAdapterTest.java  |   71 ++
 .../api/test/WordpressMockServerTestSupport.java   |  106 ++
 .../test/WordpressServerHttpRequestHandler.java    |   61 ++
 .../resources/META-INF/cxf/org.apache.cxf.Logger   |    1 +
 .../src/test/resources/data/posts/create.json      |  100 ++
 .../src/test/resources/data/posts/delete.json      |  100 ++
 .../src/test/resources/data/posts/forcedelete.json |   45 +
 .../src/test/resources/data/posts/list.json        | 1028 ++++++++++++++++++++
 .../src/test/resources/data/posts/single.json      |   95 ++
 .../src/test/resources/data/posts/update.json      |  100 ++
 .../src/test/resources/data/users/create.json      |    1 +
 .../src/test/resources/data/users/create2.json     |   44 +
 .../src/test/resources/data/users/delete.json      |   35 +
 .../src/test/resources/data/users/list.json        |    1 +
 .../src/test/resources/data/users/single.json      |    1 +
 .../src/test/resources/data/users/update.json      |  103 ++
 .../src/test/resources/log4j2.properties           |   28 +
 components/pom.xml                                 |    1 +
 components/readme.adoc                             |    5 +-
 docs/user-manual/en/SUMMARY.md                     |    1 +
 parent/pom.xml                                     |   10 +
 .../camel-wordpress-starter/pom.xml                |   53 +
 .../WordpressComponentAutoConfiguration.java       |  128 +++
 .../WordpressComponentConfiguration.java           |  142 +++
 .../src/main/resources/META-INF/LICENSE.txt        |    0
 .../src/main/resources/META-INF/NOTICE.txt         |    0
 .../src/main/resources/META-INF/spring.factories   |   19 +
 .../src/main/resources/META-INF/spring.provides    |   17 +
 platforms/spring-boot/components-starter/pom.xml   |    1 +
 .../camel-spring-boot-dependencies/pom.xml         |   10 +
 131 files changed, 8691 insertions(+), 1 deletion(-)
 create mode 100644 components/camel-wordpress/pom.xml
 create mode 100644 components/camel-wordpress/src/main/docs/wordpress-component.adoc
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponent.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponentConfiguration.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressAPIConfiguration.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressConstants.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressServiceProvider.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/BaseWordpressAuthentication.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/WordpressAuthentication.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/WordpressBasicAuthentication.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Category.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CategoryOrderBy.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CategorySearchCriteria.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Classifier.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/ClassifierSearchCriteria.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Comment.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentOrderBy.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentSearchCriteria.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentStatus.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Content.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Context.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/DeletedModel.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Format.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Media.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Order.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Page.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PageOrderBy.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PageSearchCriteria.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PingStatus.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Post.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostCommentStatus.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostOrderBy.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostRevision.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostSearchCriteria.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Publishable.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PublishableSearchCriteria.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PublishableStatus.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/SearchCriteria.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Tag.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TagOrderBy.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TagSearchCriteria.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Taxonomy.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TextPublishable.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/User.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/UserOrderBy.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/UserSearchCriteria.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressCrudService.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressService.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceCategories.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceComments.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePages.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePostRevision.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePosts.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceTags.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceTaxonomy.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceUsers.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/AbstractWordpressCrudServiceAdapter.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/AbstractWordpressServiceAdapter.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceCategoriesAdapter.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceCommentsAdapter.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePagesAdapter.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapter.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceTagsAdapter.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceTaxonomyAdapter.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceUsersAdapter.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressSevicePostRevisionAdapter.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/CategoriesSPI.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/CommentsSPI.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PagesSPI.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PostRevisionsSPI.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PostsSPI.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/TagsSPI.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/TaxonomySPI.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/UsersSPI.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/AbstractWordpressConsumer.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/WordpressPostConsumer.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/WordpressUserConsumer.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/AbstractWordpressProducer.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressPostProducer.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressUserProducer.java
 create mode 100644 components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/proxy/WordpressOperationType.java
 copy {tooling/maven/guice-maven-plugin => components/camel-wordpress}/src/main/resources/META-INF/LICENSE.txt (100%)
 copy {tooling/maven/guice-maven-plugin => components/camel-wordpress}/src/main/resources/META-INF/NOTICE.txt (100%)
 create mode 100644 components/camel-wordpress/src/main/resources/META-INF/services/org/apache/camel/component/wordpress
 create mode 100644 components/camel-wordpress/src/main/resources/log4j.properties
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressComponentTest.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressComponentTestSupport.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressPostOperationTest.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressTestConstants.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressUserOperationTest.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/model/PublishableStatusTest.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapterTest.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceCategoriesAdapterIT.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceCommentsAdapterIT.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServicePagesAdapterIT.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServicePostRevisionAdapterIT.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceTagsAdapterIT.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceTaxonomyAdapterIT.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceUsersAdapterTest.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressMockServerTestSupport.java
 create mode 100644 components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressServerHttpRequestHandler.java
 create mode 100644 components/camel-wordpress/src/test/resources/META-INF/cxf/org.apache.cxf.Logger
 create mode 100644 components/camel-wordpress/src/test/resources/data/posts/create.json
 create mode 100644 components/camel-wordpress/src/test/resources/data/posts/delete.json
 create mode 100644 components/camel-wordpress/src/test/resources/data/posts/forcedelete.json
 create mode 100644 components/camel-wordpress/src/test/resources/data/posts/list.json
 create mode 100644 components/camel-wordpress/src/test/resources/data/posts/single.json
 create mode 100644 components/camel-wordpress/src/test/resources/data/posts/update.json
 create mode 100644 components/camel-wordpress/src/test/resources/data/users/create.json
 create mode 100644 components/camel-wordpress/src/test/resources/data/users/create2.json
 create mode 100644 components/camel-wordpress/src/test/resources/data/users/delete.json
 create mode 100644 components/camel-wordpress/src/test/resources/data/users/list.json
 create mode 100644 components/camel-wordpress/src/test/resources/data/users/single.json
 create mode 100644 components/camel-wordpress/src/test/resources/data/users/update.json
 create mode 100644 components/camel-wordpress/src/test/resources/log4j2.properties
 create mode 100644 platforms/spring-boot/components-starter/camel-wordpress-starter/pom.xml
 create mode 100644 platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/java/org/apache/camel/component/wordpress/springboot/WordpressComponentAutoConfiguration.java
 create mode 100644 platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/java/org/apache/camel/component/wordpress/springboot/WordpressComponentConfiguration.java
 copy {tooling/maven/guice-maven-plugin => platforms/spring-boot/components-starter/camel-wordpress-starter}/src/main/resources/META-INF/LICENSE.txt (100%)
 copy {tooling/maven/guice-maven-plugin => platforms/spring-boot/components-starter/camel-wordpress-starter}/src/main/resources/META-INF/NOTICE.txt (100%)
 create mode 100644 platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/resources/META-INF/spring.factories
 create mode 100644 platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/resources/META-INF/spring.provides

-- 
To stop receiving notification emails like this one, please contact
acosentino@apache.org.

[camel] 02/02: CAMEL-12183 - Fixed test log4j2 configuration and regen

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit daa882b2608b9de28bf419a7cafcc1914f4db17d
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Jan 26 08:44:41 2018 +0100

    CAMEL-12183 - Fixed test log4j2 configuration and regen
---
 bom/camel-bom/pom.xml                              | 10 ++++++++++
 .../src/test/resources/log4j2.properties           | 23 ++++++++--------------
 components/readme.adoc                             |  5 ++++-
 docs/user-manual/en/SUMMARY.md                     |  1 +
 .../camel-spring-boot-dependencies/pom.xml         | 10 ++++++++++
 5 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 079a203..fbc56d9 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -2670,6 +2670,16 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-wordpress</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-wordpress-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xchange</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/components/camel-wordpress/src/test/resources/log4j2.properties b/components/camel-wordpress/src/test/resources/log4j2.properties
index fb3f182..1a4aaf5 100644
--- a/components/camel-wordpress/src/test/resources/log4j2.properties
+++ b/components/camel-wordpress/src/test/resources/log4j2.properties
@@ -17,19 +17,12 @@
 
 appender.file.type = File
 appender.file.name = file
-appender.file.fileName = target/camel-wordpress.log
+appender.file.fileName = target/camel-wordpress-test.log
 appender.file.layout.type = PatternLayout
-appender.file.layout.pattern = %d %-5p %c{1} - %m %n
-appender.console.type = Console
-appender.console.name = console
-appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
-logger.wordpress.name = org.apache.camel.component.wordpress
-logger.wordpress.level = TRACE
-logger.apache.name = org.apache
-logger.apache.level = DEBUG
-logger.cxf.name = org.apache.cxf
-logger.cxf.level = FINE
-
-rootLogger.level = FINE
-rootLogger.appenderRef.file.ref = console
\ No newline at end of file
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+appender.out.type = Console
+appender.out.name = out
+appender.out.layout.type = PatternLayout
+appender.out.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+rootLogger.level = DEBUG
+rootLogger.appenderRef.file.ref = file
\ No newline at end of file
diff --git a/components/readme.adoc b/components/readme.adoc
index c3c4d5c..d3b6e6a 100644
--- a/components/readme.adoc
+++ b/components/readme.adoc
@@ -2,7 +2,7 @@ Components
 ^^^^^^^^^^
 
 // components: START
-Number of Components: 289 in 198 JAR artifacts (19 deprecated)
+Number of Components: 290 in 199 JAR artifacts (19 deprecated)
 
 [width="100%",cols="4,1,5",options="header"]
 |===
@@ -842,6 +842,9 @@ Number of Components: 289 in 198 JAR artifacts (19 deprecated)
 | link:camel-weather/src/main/docs/weather-component.adoc[Weather] (camel-weather) +
 `weather:name` | 2.12 | Polls the weather information from Open Weather Map.
 
+| link:camel-wordpress/src/main/docs/wordpress-component.adoc[Wordpress] (camel-wordpress) +
+`wordpress:operation` | 2.20.1 | Represents a Wordpress endpoint.
+
 | link:camel-xchange/src/main/docs/xchange-component.adoc[XChange] (camel-xchange) +
 `xchange:name` | 2.21 | Camel XChange support
 
diff --git a/docs/user-manual/en/SUMMARY.md b/docs/user-manual/en/SUMMARY.md
index 90627a3..56310ee 100644
--- a/docs/user-manual/en/SUMMARY.md
+++ b/docs/user-manual/en/SUMMARY.md
@@ -378,6 +378,7 @@
 	* [Velocity](velocity-component.adoc)
 	* [Vert.x](vertx-component.adoc)
 	* [Weather](weather-component.adoc)
+	* [Wordpress](wordpress-component.adoc)
 	* [XChange](xchange-component.adoc)
 	* [XML RPC](xmlrpc-component.adoc)
 	* [XML Security](xmlsecurity-component.adoc)
diff --git a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
index 9d38603..880791c 100644
--- a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
+++ b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
@@ -2866,6 +2866,16 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-wordpress</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-wordpress-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xchange</artifactId>
         <version>${project.version}</version>
       </dependency>

-- 
To stop receiving notification emails like this one, please contact
acosentino@apache.org.

[camel] 01/02: CAMEL-12183: add support for Wordpress REST API

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 316ba67ee7ea63fd9c64996144b452c6b80e7084
Author: Ricardo Zanini <ri...@gmail.com>
AuthorDate: Tue Jan 23 16:39:10 2018 -0200

    CAMEL-12183: add support for Wordpress REST API
---
 apache-camel/src/main/descriptors/common-bin.xml   |    2 +
 components/camel-wordpress/pom.xml                 |  110 +++
 .../src/main/docs/wordpress-component.adoc         |  113 +++
 .../component/wordpress/WordpressComponent.java    |   87 ++
 .../wordpress/WordpressComponentConfiguration.java |  162 +++
 .../component/wordpress/WordpressEndpoint.java     |  157 +++
 .../wordpress/api/WordpressAPIConfiguration.java   |   89 ++
 .../wordpress/api/WordpressConstants.java          |   26 +
 .../wordpress/api/WordpressServiceProvider.java    |   94 ++
 .../api/auth/BaseWordpressAuthentication.java      |   57 ++
 .../api/auth/WordpressAuthentication.java          |   35 +
 .../api/auth/WordpressBasicAuthentication.java     |   53 +
 .../component/wordpress/api/model/Category.java    |   40 +
 .../wordpress/api/model/CategoryOrderBy.java       |   21 +
 .../api/model/CategorySearchCriteria.java          |   46 +
 .../component/wordpress/api/model/Classifier.java  |  109 +++
 .../api/model/ClassifierSearchCriteria.java        |   64 ++
 .../component/wordpress/api/model/Comment.java     |  215 ++++
 .../wordpress/api/model/CommentOrderBy.java        |   21 +
 .../wordpress/api/model/CommentSearchCriteria.java |  157 +++
 .../wordpress/api/model/CommentStatus.java         |   21 +
 .../component/wordpress/api/model/Content.java     |   76 ++
 .../component/wordpress/api/model/Context.java     |   24 +
 .../wordpress/api/model/DeletedModel.java          |   47 +
 .../component/wordpress/api/model/Format.java      |   26 +
 .../camel/component/wordpress/api/model/Media.java |   27 +
 .../camel/component/wordpress/api/model/Order.java |   24 +
 .../camel/component/wordpress/api/model/Page.java  |   52 +
 .../component/wordpress/api/model/PageOrderBy.java |   24 +
 .../wordpress/api/model/PageSearchCriteria.java    |   69 ++
 .../component/wordpress/api/model/PingStatus.java  |   24 +
 .../camel/component/wordpress/api/model/Post.java  |  101 ++
 .../wordpress/api/model/PostCommentStatus.java     |   24 +
 .../component/wordpress/api/model/PostOrderBy.java |   26 +
 .../wordpress/api/model/PostRevision.java          |   87 ++
 .../wordpress/api/model/PostSearchCriteria.java    |   80 ++
 .../component/wordpress/api/model/Publishable.java |  115 +++
 .../api/model/PublishableSearchCriteria.java       |   99 ++
 .../wordpress/api/model/PublishableStatus.java     |   49 +
 .../wordpress/api/model/SearchCriteria.java        |   92 ++
 .../camel/component/wordpress/api/model/Tag.java   |   27 +
 .../component/wordpress/api/model/TagOrderBy.java  |   21 +
 .../wordpress/api/model/TagSearchCriteria.java     |   48 +
 .../component/wordpress/api/model/Taxonomy.java    |  120 +++
 .../wordpress/api/model/TextPublishable.java       |  167 ++++
 .../camel/component/wordpress/api/model/User.java  |  211 ++++
 .../component/wordpress/api/model/UserOrderBy.java |   21 +
 .../wordpress/api/model/UserSearchCriteria.java    |   75 ++
 .../api/service/WordpressCrudService.java          |   45 +
 .../wordpress/api/service/WordpressService.java    |   33 +
 .../api/service/WordpressServiceCategories.java    |   24 +
 .../api/service/WordpressServiceComments.java      |   24 +
 .../api/service/WordpressServicePages.java         |   27 +
 .../api/service/WordpressServicePostRevision.java  |   31 +
 .../api/service/WordpressServicePosts.java         |   35 +
 .../api/service/WordpressServiceTags.java          |   23 +
 .../api/service/WordpressServiceTaxonomy.java      |   29 +
 .../api/service/WordpressServiceUsers.java         |   23 +
 .../impl/AbstractWordpressCrudServiceAdapter.java  |   89 ++
 .../impl/AbstractWordpressServiceAdapter.java      |   81 ++
 .../impl/WordpressServiceCategoriesAdapter.java    |   67 ++
 .../impl/WordpressServiceCommentsAdapter.java      |   67 ++
 .../service/impl/WordpressServicePagesAdapter.java |   88 ++
 .../service/impl/WordpressServicePostsAdapter.java |   97 ++
 .../service/impl/WordpressServiceTagsAdapter.java  |   67 ++
 .../impl/WordpressServiceTaxonomyAdapter.java      |   49 +
 .../service/impl/WordpressServiceUsersAdapter.java |   70 ++
 .../impl/WordpressSevicePostRevisionAdapter.java   |   57 ++
 .../wordpress/api/service/spi/CategoriesSPI.java   |   73 ++
 .../wordpress/api/service/spi/CommentsSPI.java     |   79 ++
 .../wordpress/api/service/spi/PagesSPI.java        |   79 ++
 .../api/service/spi/PostRevisionsSPI.java          |   55 ++
 .../wordpress/api/service/spi/PostsSPI.java        |   85 ++
 .../wordpress/api/service/spi/TagsSPI.java         |   67 ++
 .../wordpress/api/service/spi/TaxonomySPI.java     |   42 +
 .../wordpress/api/service/spi/UsersSPI.java        |   73 ++
 .../consumer/AbstractWordpressConsumer.java        |   87 ++
 .../wordpress/consumer/WordpressPostConsumer.java  |   68 ++
 .../wordpress/consumer/WordpressUserConsumer.java  |   67 ++
 .../producer/AbstractWordpressProducer.java        |   69 ++
 .../wordpress/producer/WordpressPostProducer.java  |   56 ++
 .../wordpress/producer/WordpressUserProducer.java  |   49 +
 .../wordpress/proxy/WordpressOperationType.java    |   40 +
 .../src/main/resources/META-INF/LICENSE.txt        |  203 ++++
 .../src/main/resources/META-INF/NOTICE.txt         |   11 +
 .../services/org/apache/camel/component/wordpress  |   18 +
 .../src/main/resources/log4j.properties            |   32 +
 .../wordpress/WordpressComponentTest.java          |   56 ++
 .../wordpress/WordpressComponentTestSupport.java   |   44 +
 .../wordpress/WordpressPostOperationTest.java      |  123 +++
 .../wordpress/WordpressTestConstants.java          |   28 +
 .../wordpress/WordpressUserOperationTest.java      |  119 +++
 .../wordpress/api/model/PublishableStatusTest.java |   48 +
 .../impl/WordpressServicePostsAdapterTest.java     |   72 ++
 .../WordpressServiceCategoriesAdapterIT.java       |   64 ++
 .../ignored/WordpressServiceCommentsAdapterIT.java |   64 ++
 .../ignored/WordpressServicePagesAdapterIT.java    |   62 ++
 .../WordpressServicePostRevisionAdapterIT.java     |   73 ++
 .../ignored/WordpressServiceTagsAdapterIT.java     |   64 ++
 .../ignored/WordpressServiceTaxonomyAdapterIT.java |   58 ++
 .../ignored/WordpressServiceUsersAdapterTest.java  |   71 ++
 .../api/test/WordpressMockServerTestSupport.java   |  106 ++
 .../test/WordpressServerHttpRequestHandler.java    |   61 ++
 .../resources/META-INF/cxf/org.apache.cxf.Logger   |    1 +
 .../src/test/resources/data/posts/create.json      |  100 ++
 .../src/test/resources/data/posts/delete.json      |  100 ++
 .../src/test/resources/data/posts/forcedelete.json |   45 +
 .../src/test/resources/data/posts/list.json        | 1028 ++++++++++++++++++++
 .../src/test/resources/data/posts/single.json      |   95 ++
 .../src/test/resources/data/posts/update.json      |  100 ++
 .../src/test/resources/data/users/create.json      |    1 +
 .../src/test/resources/data/users/create2.json     |   44 +
 .../src/test/resources/data/users/delete.json      |   35 +
 .../src/test/resources/data/users/list.json        |    1 +
 .../src/test/resources/data/users/single.json      |    1 +
 .../src/test/resources/data/users/update.json      |  103 ++
 .../src/test/resources/log4j2.properties           |   35 +
 components/pom.xml                                 |    1 +
 parent/pom.xml                                     |   10 +
 .../camel-wordpress-starter/pom.xml                |   53 +
 .../WordpressComponentAutoConfiguration.java       |  128 +++
 .../WordpressComponentConfiguration.java           |  142 +++
 .../src/main/resources/META-INF/LICENSE.txt        |  203 ++++
 .../src/main/resources/META-INF/NOTICE.txt         |   11 +
 .../src/main/resources/META-INF/spring.factories   |   19 +
 .../src/main/resources/META-INF/spring.provides    |   17 +
 platforms/spring-boot/components-starter/pom.xml   |    1 +
 127 files changed, 9101 insertions(+)

diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml
index 9a94540..337a005 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -288,6 +288,7 @@
         <include>org.apache.camel:camel-vertx</include>
         <include>org.apache.camel:camel-weather</include>
         <include>org.apache.camel:camel-websocket</include>
+        <include>org.apache.camel:camel-wordpress</include>
         <include>org.apache.camel:camel-xmlbeans</include>
         <include>org.apache.camel:camel-xchange</include>
         <include>org.apache.camel:camel-xmljson</include>
@@ -584,6 +585,7 @@
         <include>org.apache.camel:camel-vertx-starter</include>
         <include>org.apache.camel:camel-weather-starter</include>
         <include>org.apache.camel:camel-websocket-starter</include>
+        <include>org.apache.camel:camel-wordpress-starter</include>
         <include>org.apache.camel:camel-xmlbeans-starter</include>
         <include>org.apache.camel:camel-xchange-starter</include>
         <include>org.apache.camel:camel-xmljson-starter</include>
diff --git a/components/camel-wordpress/pom.xml b/components/camel-wordpress/pom.xml
new file mode 100644
index 0000000..678dfc0
--- /dev/null
+++ b/components/camel-wordpress/pom.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.apache.camel</groupId>
+		<artifactId>components</artifactId>
+		<version>2.21.0-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>camel-wordpress</artifactId>
+	<packaging>jar</packaging>
+
+	<name>Camel :: Wordpress</name>
+	<description>Wordpress REST API support</description>
+
+	<properties>
+		<hamcrest-version>1.3</hamcrest-version>
+		<camel.osgi.export.pkg>
+			org.apache.camel.component.wordpress.*,
+		</camel.osgi.export.pkg>
+		<camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=wordpress</camel.osgi.export.service>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.camel</groupId>
+			<artifactId>camel-core</artifactId>
+		</dependency>
+
+		<!-- support camel documentation -->
+		<dependency>
+			<groupId>org.apache.camel</groupId>
+			<artifactId>apt</artifactId>
+		</dependency>
+
+		<!-- logging -->
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-slf4j-impl</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+		<!-- testing -->
+		<dependency>
+			<groupId>org.apache.camel</groupId>
+			<artifactId>camel-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.hamcrest</groupId>
+			<artifactId>hamcrest-all</artifactId>
+			<version>${hamcrest-version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-core</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpclient</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+		<!-- Wordpress4j -->
+		<dependency>
+			<groupId>org.apache.cxf</groupId>
+			<artifactId>cxf-rt-rs-client</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.cxf</groupId>
+			<artifactId>cxf-rt-frontend-jaxrs</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-databind</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.dataformat</groupId>
+			<artifactId>jackson-dataformat-xml</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-annotations</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.jaxrs</groupId>
+			<artifactId>jackson-jaxrs-json-provider</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.google.guava</groupId>
+			<artifactId>guava</artifactId>
+		</dependency>
+	</dependencies>
+
+</project>
diff --git a/components/camel-wordpress/src/main/docs/wordpress-component.adoc b/components/camel-wordpress/src/main/docs/wordpress-component.adoc
new file mode 100644
index 0000000..a8d98f8
--- /dev/null
+++ b/components/camel-wordpress/src/main/docs/wordpress-component.adoc
@@ -0,0 +1,113 @@
+== Wordpress Component
+
+*Available as of Camel version 2.20.1*
+
+Camel component for https://developer.wordpress.org/rest-api/reference/[Wordpress API].
+
+=== Usage
+
+Currently only the **Posts** and **Users** operations are supported.
+
+==== Configure your route
+
+The `WordpressConfiguration` class can be used to set initial properties configuration to the component instead of passing it as query parameter. The following listing shows how to set the component to be used in your routes.
+
+[source,java]
+--------------------------------------------------
+public void configure() {
+    final WordpressConfiguration configuration = new WordpressConfiguration();
+    final WordpressComponent component = new WordpressComponent();
+    configuration.setApiVersion("2");
+    configuration.setUrl("http://yoursite.com/wp-json/");
+    component.setConfiguration(configuration);
+    getContext().addComponent("wordpress", component);
+    
+    from("wordpress:post?id=1")
+      .to("mock:result");
+}
+--------------------------------------------------
+
+// component options: START
+The Wordpress component supports 2 options which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *configuration* (advanced) | Wordpress component configuration |  | WordpressComponent Configuration
+| *resolveProperty Placeholders* (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean
+|===
+// component options: END
+
+// endpoint options: START
+The Wordpress endpoint is configured using URI syntax:
+
+----
+wordpress:operation
+----
+
+with the following path and query parameters:
+
+==== Path Parameters (2 parameters):
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *operation* | *Required* The endpoint operation. |  | String
+| *operationDetail* | The second part of an endpoint operation. Needed only when endpoint semantic is not enough like wordpress:post:delete |  | String
+|===
+
+==== Query Parameters (11 parameters):
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *apiVersion* (common) | The Wordpress REST API version | 2 | String
+| *criteria* (common) | The criteria to use with complex searches. |  | Map
+| *force* (common) | Whether to bypass trash and force deletion. | false | Boolean
+| *id* (common) | The entity id |  | Integer
+| *password* (common) | Password from authorized user |  | String
+| *url* (common) | *Required* The Wordpress API URL from your site e.g. http://myblog.com/wp-json/ |  | String
+| *user* (common) | Authorized user to perform writing operations |  | String
+| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler which mean any exceptions occurred while the consumer is trying to pickup incoming messages or the likes will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions that will be logged at WARN or ERROR level and ignored. | false | boolean
+| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
+| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
+| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+|===
+// endpoint options: END
+
+
+Most of parameters needed when performing a read operation mirrors from the official https://developer.wordpress.org/rest-api/reference/[API]. When performing searches operations, the `criteria.` suffix is needed. Take the following `Consumer` as example:
+
+---------------------------------------------------------
+wordpress:post?criteria.perPage=10&criteria.orderBy=author&criteria.categories=camel,dozer,json
+---------------------------------------------------------
+
+
+==== Consumer Example
+
+Consumer polls from the API from time to time domain objects from Wordpress. Following, an example using the `Post` operation:
+
+- `wordpress:post` retrieves posts (defaults to 10 posts)    
+- `wordpress:post?id=1` search for a specific post
+
+==== Producer Example
+
+Producer performs write operations on Wordpress like adding a new user or update a post. To be able to write, you must have an authorized user credentials (see Authentication). 
+
+- `wordpress:post` creates a new post from the `org.apache.camel.component.wordpress.api.model.Post` class in the message body.  
+- `wordpress:post?id=1` updates a post based on data `org.apache.camel.component.wordpress.api.model.Post` from the message body.  
+- `wordpress:post:delete?id=1` deletes a specific post
+
+=== Authentication
+
+Producers that perform write operations (e.g. create a new post) https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/[must have an authenticated user] to do so. The standard authentication mechanism used by Wordpress is cookie. Unfortunately this method is not supported outside Wordpress environment because it's rely on https://codex.wordpress.org/WordPress_Nonces[nonce] internal function.
+
+There's some alternatives to use the Wordpress API without nonces, but requires specific plugin installations.
+
+At this time, `camel-wordpress` only supports Basic Authentication (more to come). To configure it, you must install the https://github.com/WP-API/Basic-Auth[Basic-Auth Wordpress plugin] and pass the credentials to the endpoint:
+
+`from("direct:deletePost").to("wordpress:post:delete?id=9&user=ben&password=password123").to("mock:resultDelete");`
+
+**It's not recommend to use Basic Authentication in production without TLS!!**
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponent.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponent.java
new file mode 100644
index 0000000..0394c9e
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponent.java
@@ -0,0 +1,87 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.util.IntrospectionSupport;
+
+/**
+ * Represents the component that manages {@link WordpressEndpoint}.
+ */
+public class WordpressComponent extends DefaultComponent {
+
+    private static final String OP_SEPARATOR = ":";
+
+    @Metadata(label = "advanced", description = "Wordpress component configuration")
+    private WordpressComponentConfiguration configuration;
+
+    public WordpressComponent() {
+        this(new WordpressComponentConfiguration());
+    }
+
+    public WordpressComponent(WordpressComponentConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    public WordpressComponent(CamelContext camelContext) {
+        super(camelContext);
+        this.configuration = new WordpressComponentConfiguration();
+    }
+
+    public WordpressComponentConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    public void setConfiguration(WordpressComponentConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+        final WordpressComponentConfiguration endpointConfiguration = this.copyComponentProperties();
+
+        WordpressEndpoint endpoint = new WordpressEndpoint(uri, this, endpointConfiguration);
+        setProperties(endpoint, parameters);
+
+        this.discoverOperations(endpoint, remaining);
+        endpoint.configureProperties(parameters);
+
+        return endpoint;
+    }
+
+    private void discoverOperations(WordpressEndpoint endpoint, String remaining) {
+        final String[] operations = remaining.split(OP_SEPARATOR);
+        endpoint.setOperation(operations[0]);
+        if (operations.length > 1) {
+            endpoint.setOperationDetail(operations[1]);
+        }
+    }
+
+    private WordpressComponentConfiguration copyComponentProperties() throws Exception {
+        Map<String, Object> componentProperties = new HashMap<String, Object>();
+        IntrospectionSupport.getProperties(configuration, componentProperties, null, false);
+
+        // create endpoint configuration with component properties
+        WordpressComponentConfiguration config = new WordpressComponentConfiguration();
+        IntrospectionSupport.setProperties(config, componentProperties);
+        return config;
+    }
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponentConfiguration.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponentConfiguration.java
new file mode 100644
index 0000000..572cf42
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponentConfiguration.java
@@ -0,0 +1,162 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.camel.component.wordpress.api.WordpressConstants;
+import org.apache.camel.component.wordpress.api.model.SearchCriteria;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriParams;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.StringHelper;
+
+@UriParams
+public class WordpressComponentConfiguration {
+
+    @UriParam(description = "The Wordpress API URL from your site, e.g. http://myblog.com/wp-json/")
+    @Metadata(required = "true")
+    private String url;
+    @UriParam(description = "The Wordpress REST API version", defaultValue = WordpressConstants.API_VERSION)
+    private String apiVersion = WordpressConstants.API_VERSION;
+    @UriParam(description = "Authorized user to perform writing operations")
+    private String user;
+    @UriParam(description = "Password from authorized user")
+    private String password;
+    @UriParam(description = "The entity ID. Should be passed when the operation performed requires a specific entity, e.g. deleting a post", javaType = "java.lang.Integer")
+    private Integer id;
+    @UriParam(description = "The criteria to use with complex searches.", prefix = "criteria.", multiValue = true)
+    private Map<String, Object> criteria;
+    @UriParam(description = "Whether to bypass trash and force deletion.", defaultValue = "false", javaType = "java.lang.Boolean")
+    private Boolean force = false;
+
+    private SearchCriteria searchCriteria;
+
+    /**
+     * Wordpress URL in {@link URI} format
+     */
+    private URI uri;
+
+    public WordpressComponentConfiguration() {
+
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public URI getUri() {
+        return uri;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getApiVersion() {
+        return apiVersion;
+    }
+
+    public void setApiVersion(String apiVersion) {
+        this.apiVersion = apiVersion;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getUser() {
+        return user;
+    }
+
+    public void setUser(String user) {
+        this.user = user;
+    }
+
+    /**
+     * The entity id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Boolean isForce() {
+        return force;
+    }
+
+    public void setForce(Boolean force) {
+        this.force = force;
+    }
+
+    /**
+     * The search criteria
+     * 
+     * @return
+     */
+    public SearchCriteria getSearchCriteria() {
+        return searchCriteria;
+    }
+
+    public void setSearchCriteria(SearchCriteria searchCriteria) {
+        this.searchCriteria = searchCriteria;
+    }
+
+    public Map<String, Object> getCriteriaProperties() {
+        if (criteria != null) {
+            return Collections.unmodifiableMap(criteria);
+        }
+        return null;
+    }
+
+    public void setCriteriaProperties(Map<String, Object> criteriaProperties) {
+        this.criteria = Collections.unmodifiableMap(criteriaProperties);
+    }
+
+    /**
+     * Return all configuration properties on a map.
+     * 
+     * @return
+     */
+    public Map<String, Object> asMap() {
+        final Map<String, Object> map = new HashMap<>();
+        IntrospectionSupport.getProperties(this, map, null);
+        return map;
+    }
+
+    public void validate() {
+        StringHelper.notEmpty(this.apiVersion, "apiVersion");
+        StringHelper.notEmpty(this.url, "url");
+        try {
+            this.uri = new URI(url);
+        } catch (URISyntaxException e) {
+            throw new IllegalArgumentException("Impossible to set Wordpress API URL", e);
+        }
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java
new file mode 100644
index 0000000..77af980
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java
@@ -0,0 +1,157 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.wordpress.api.WordpressAPIConfiguration;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.component.wordpress.api.auth.WordpressBasicAuthentication;
+import org.apache.camel.component.wordpress.api.model.SearchCriteria;
+import org.apache.camel.component.wordpress.consumer.WordpressPostConsumer;
+import org.apache.camel.component.wordpress.consumer.WordpressUserConsumer;
+import org.apache.camel.component.wordpress.producer.WordpressPostProducer;
+import org.apache.camel.component.wordpress.producer.WordpressUserProducer;
+import org.apache.camel.component.wordpress.proxy.WordpressOperationType;
+import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.util.EndpointHelper;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * Represents a Wordpress endpoint.
+ */
+@UriEndpoint(firstVersion = "2.20.1", scheme = "wordpress", title = "Wordpress", syntax = "wordpress:operation", label = "Wordpress")
+public class WordpressEndpoint extends DefaultEndpoint {
+
+    public static final String ENDPOINT_SERVICE_POST = "post, user";
+
+    @UriPath(description = "The endpoint operation.", enums = ENDPOINT_SERVICE_POST)
+    @Metadata(required = "true")
+    private String operation;
+
+    @UriPath(description = "The second part of an endpoint operation. Needed only when endpoint semantic is not enough, like wordpress:post:delete", enums = "delete")
+    private String operationDetail;
+
+    @UriParam
+    private WordpressComponentConfiguration config;
+
+    public WordpressEndpoint(String uri, WordpressComponent component, WordpressComponentConfiguration configuration) {
+        super(uri, component);
+        this.config = configuration;
+    }
+
+    public WordpressComponentConfiguration getConfig() {
+        return config;
+    }
+
+    public String getOperation() {
+        return operation;
+    }
+
+    public void setOperation(String operation) {
+        this.operation = operation;
+    }
+
+    public String getOperationDetail() {
+        return operationDetail;
+    }
+
+    public void setOperationDetail(String operationDetail) {
+        this.operationDetail = operationDetail;
+    }
+
+    public boolean isSingleton() {
+        return true;
+    }
+
+    public Producer createProducer() throws Exception {
+        switch (WordpressOperationType.valueOf(operation)) {
+        case post:
+            return new WordpressPostProducer(this);
+        case user:
+            return new WordpressUserProducer(this);
+        default:
+            break;
+        }
+        throw new UnsupportedOperationException(String.format("Operation '%s' not supported.", operation));
+    }
+
+    public Consumer createConsumer(Processor processor) throws Exception {
+        switch (WordpressOperationType.valueOf(operation)) {
+        case post:
+            return new WordpressPostConsumer(this, processor);
+        case user:
+            return new WordpressUserConsumer(this, processor);
+        default:
+            break;
+        }
+        throw new UnsupportedOperationException(String.format("Operation '%s' not supported.", operation));
+    }
+
+    @Override
+    public void configureProperties(Map<String, Object> options) {
+        super.configureProperties(options);
+
+        // set configuration properties first
+        try {
+            if (config == null) {
+                config = new WordpressComponentConfiguration();
+            }
+            EndpointHelper.setReferenceProperties(getCamelContext(), config, options);
+            EndpointHelper.setProperties(getCamelContext(), config, options);
+
+            if (config.getSearchCriteria() == null) {
+                final SearchCriteria searchCriteria = WordpressOperationType.valueOf(operation).getCriteriaType().newInstance();
+                Map<String, Object> criteriaOptions = IntrospectionSupport.extractProperties(options, "criteria.");
+                // any property that has a "," should be a List
+                criteriaOptions = criteriaOptions.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> {
+                    if (e != null && e.toString().indexOf(",") > -1) {
+                        return Arrays.asList(e.toString().split(","));
+                    }
+                    return e.getValue();
+                }));
+                IntrospectionSupport.setProperties(searchCriteria, criteriaOptions);
+                config.setSearchCriteria(searchCriteria);
+            }
+        } catch (Exception e) {
+            throw new IllegalArgumentException(e.getMessage(), e);
+        }
+        // validate configuration
+        config.validate();
+        this.initServiceProvider();
+    }
+
+    private void initServiceProvider() {
+        final WordpressAPIConfiguration apiConfiguration = new WordpressAPIConfiguration(config.getUrl(), config.getApiVersion());
+        // basic auth
+        if (ObjectHelper.isNotEmpty(config.getUser())) {
+            apiConfiguration.setAuthentication(new WordpressBasicAuthentication(config.getUser(), config.getPassword()));
+        }
+
+        WordpressServiceProvider.getInstance().init(apiConfiguration);
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressAPIConfiguration.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressAPIConfiguration.java
new file mode 100644
index 0000000..7ab529e
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressAPIConfiguration.java
@@ -0,0 +1,89 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api;
+
+import java.io.Serializable;
+import java.util.Objects;
+import static java.util.Objects.hash;
+import org.apache.camel.component.wordpress.api.auth.WordpressAuthentication;
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * Model for the API configuration.
+ */
+public final class WordpressAPIConfiguration implements Serializable {
+
+    private static final long serialVersionUID = 3512991364074374129L;
+    private String apiUrl;
+    private String apiVersion;
+    private WordpressAuthentication authentication;
+
+    public WordpressAPIConfiguration() {
+
+    }
+
+    public WordpressAPIConfiguration(final String apiUrl, final String apiVersion) {
+        this.apiUrl = apiUrl;
+        this.apiVersion = apiVersion;
+    }
+
+    public String getApiUrl() {
+        return apiUrl;
+    }
+
+    public void setApiUrl(String apiUrl) {
+        this.apiUrl = apiUrl;
+    }
+
+    public String getApiVersion() {
+        return apiVersion;
+    }
+
+    public void setApiVersion(String apiVersion) {
+        this.apiVersion = apiVersion;
+    }
+
+    public WordpressAuthentication getAuthentication() {
+        return authentication;
+    }
+
+    public void setAuthentication(WordpressAuthentication authentication) {
+        this.authentication = authentication;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).addValue(this.apiUrl).add("Version", this.apiVersion).addValue(this.authentication).toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return hash(this.apiUrl, this.apiVersion, this.authentication);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (!WordpressAPIConfiguration.class.isAssignableFrom(obj.getClass())) {
+            return false;
+        }
+        return Objects.equals(this, obj);
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressConstants.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressConstants.java
new file mode 100644
index 0000000..180c4a4
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressConstants.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api;
+
+public final class WordpressConstants {
+
+    public static final String API_VERSION = "2";
+
+    private WordpressConstants() {
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressServiceProvider.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressServiceProvider.java
new file mode 100644
index 0000000..4954623
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressServiceProvider.java
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api;
+
+import java.util.HashMap;
+import org.apache.camel.component.wordpress.api.service.WordpressService;
+import org.apache.camel.component.wordpress.api.service.WordpressServicePosts;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceUsers;
+import org.apache.camel.component.wordpress.api.service.impl.WordpressServicePostsAdapter;
+import org.apache.camel.component.wordpress.api.service.impl.WordpressServiceUsersAdapter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Strings.emptyToNull;
+import static com.google.common.base.Strings.isNullOrEmpty;
+
+public final class WordpressServiceProvider {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(WordpressServiceProvider.class);
+
+    private HashMap<Class<? extends WordpressService>, WordpressService> services;
+    private WordpressAPIConfiguration configuration;
+
+    private WordpressServiceProvider() {
+
+    }
+
+    private static class ServiceProviderHolder {
+        private static final WordpressServiceProvider INSTANCE = new WordpressServiceProvider();
+    }
+
+    public static WordpressServiceProvider getInstance() {
+        return ServiceProviderHolder.INSTANCE;
+    }
+
+    public void init(String wordpressApiUrl) {
+        this.init(wordpressApiUrl, WordpressConstants.API_VERSION);
+    }
+
+    public void init(String wordpressApiUrl, String apiVersion) {
+        this.init(new WordpressAPIConfiguration(wordpressApiUrl, apiVersion));
+    }
+
+    public void init(WordpressAPIConfiguration config) {
+        checkNotNull(emptyToNull(config.getApiUrl()), "Please inform the Wordpress API url , eg.: http://myblog.com/wp-json/wp");
+
+        if (isNullOrEmpty(config.getApiVersion())) {
+            config.setApiVersion(WordpressConstants.API_VERSION);
+        }
+
+        final WordpressServicePosts servicePosts = new WordpressServicePostsAdapter(config.getApiUrl(), config.getApiVersion());
+        final WordpressServiceUsers serviceUsers = new WordpressServiceUsersAdapter(config.getApiUrl(), config.getApiVersion());
+
+        servicePosts.setWordpressAuthentication(config.getAuthentication());
+        serviceUsers.setWordpressAuthentication(config.getAuthentication());
+
+        this.services = new HashMap<>();
+        this.services.put(WordpressServicePosts.class, servicePosts);
+        this.services.put(WordpressServiceUsers.class, serviceUsers);
+
+        LOGGER.info("Wordpress Service Provider initialized using base URL: {}, API Version {}", config.getApiUrl(), config.getApiVersion());
+    }
+
+    @SuppressWarnings("unchecked")
+    public <T extends WordpressService> T getService(Class<T> wordpressServiceClazz) {
+        T service = (T)this.services.get(wordpressServiceClazz);
+        if (service == null) {
+            throw new IllegalArgumentException(String.format("Couldn't find a Wordpress Service '%s'", wordpressServiceClazz));
+        }
+        return service;
+    }
+
+    public boolean hasAuthentication() {
+        if (this.configuration != null) {
+            return this.configuration.getAuthentication() != null;
+        }
+        return false;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/BaseWordpressAuthentication.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/BaseWordpressAuthentication.java
new file mode 100644
index 0000000..5c1529c
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/BaseWordpressAuthentication.java
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.auth;
+
+import com.google.common.base.Strings;
+
+abstract class BaseWordpressAuthentication implements WordpressAuthentication {
+
+    protected String username;
+    protected String password;
+
+    BaseWordpressAuthentication() {
+
+    }
+
+    BaseWordpressAuthentication(final String username, final String password) {
+        this.password = password;
+        this.username = username;
+    }
+
+    @Override
+    public final void setPassword(String pwd) {
+        this.password = pwd;
+    }
+
+    @Override
+    public final void setUsername(String user) {
+        this.username = user;
+    }
+
+    public final String getPassword() {
+        return password;
+    }
+
+    @Override
+    public final String getUsername() {
+        return username;
+    }
+
+    protected final boolean isCredentialsSet() {
+        return !Strings.isNullOrEmpty(username) && !Strings.isNullOrEmpty(password);
+    }
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/WordpressAuthentication.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/WordpressAuthentication.java
new file mode 100644
index 0000000..6688c8e
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/WordpressAuthentication.java
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.auth;
+
+/**
+ * Wordpress Authentication Mecanism needed to perform privileged actions like create, update or delete a post.
+ * 
+ * @see <a href= "https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/">Wordpress API Authentication</a>
+ * @since 0.1
+ */
+public interface WordpressAuthentication {
+
+    void setPassword(String pwd);
+
+    void setUsername(String user);
+
+    String getUsername();
+
+    void configureAuthentication(Object client);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/WordpressBasicAuthentication.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/WordpressBasicAuthentication.java
new file mode 100644
index 0000000..6f63c48
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/auth/WordpressBasicAuthentication.java
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.auth;
+
+import org.apache.cxf.common.util.Base64Utility;
+import org.apache.cxf.jaxrs.client.ClientConfiguration;
+import org.apache.cxf.jaxrs.client.WebClient;
+
+/**
+ * Basic Authentication implementation for Wordpress authentication mechanism. Should be used only on tested environments due to lack of security. Be aware that credentials will be passed over each
+ * request to your server.
+ * <p/>
+ * On environments without non HTTPS this a high security risk.
+ * <p/>
+ * To this implementation work, the <a href="https://github.com/WP-API/Basic-Auth">Basic Authentication Plugin</a> must be installed into the Wordpress server.
+ */
+public class WordpressBasicAuthentication extends BaseWordpressAuthentication {
+
+    public WordpressBasicAuthentication() {
+    }
+
+    public WordpressBasicAuthentication(String username, String password) {
+        super(username, password);
+    }
+
+    /**
+     * HTTP Basic Authentication configuration over CXF {@link ClientConfiguration}.
+     * 
+     * @see <a href= "http://cxf.apache.org/docs/jax-rs-client-api.html#JAX-RSClientAPI-ClientsandAuthentication">CXF Clients and Authentication</a>
+     */
+    @Override
+    public void configureAuthentication(Object api) {
+        if (isCredentialsSet()) {
+            final String authorizationHeader = String.format("Basic ", Base64Utility.encode(String.format("%s:%s", this.username, this.password).getBytes()));
+            WebClient.client(api).header("Authorization", authorizationHeader);
+        }
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Category.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Category.java
new file mode 100644
index 0000000..6d4ce60
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Category.java
@@ -0,0 +1,40 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+/**
+ * Describes a Wordpress Category
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Category extends Classifier implements Serializable {
+
+    private static final long serialVersionUID = 8542893392638055010L;
+
+    private Integer parent;
+
+    public Integer getParent() {
+        return parent;
+    }
+
+    public void setParent(Integer parent) {
+        this.parent = parent;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CategoryOrderBy.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CategoryOrderBy.java
new file mode 100644
index 0000000..1c2c8a3
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CategoryOrderBy.java
@@ -0,0 +1,21 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+public enum CategoryOrderBy {
+    id, include, name, slug, term_group, description, count;
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CategorySearchCriteria.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CategorySearchCriteria.java
new file mode 100644
index 0000000..d2feb53
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CategorySearchCriteria.java
@@ -0,0 +1,46 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+public class CategorySearchCriteria extends ClassifierSearchCriteria {
+
+    private static final long serialVersionUID = 3124924225447605233L;
+
+    private CategoryOrderBy orderBy;
+    private Integer parent;
+
+    public CategorySearchCriteria() {
+
+    }
+
+    public CategoryOrderBy getOrderBy() {
+        return orderBy;
+    }
+
+    public void setOrderBy(CategoryOrderBy orderBy) {
+        this.orderBy = orderBy;
+    }
+
+    public Integer getParent() {
+        return parent;
+    }
+
+    public void setParent(Integer parent) {
+        this.parent = parent;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Classifier.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Classifier.java
new file mode 100644
index 0000000..45393ff
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Classifier.java
@@ -0,0 +1,109 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Base class for objects that "classifies" something, like a {@link Tag} or a {@link Category}. :)
+ */
+public abstract class Classifier {
+
+    private Integer id;
+    private Integer count;
+    private String description;
+    private String link;
+    private String name;
+    private String slug;
+    private String taxonomy;
+    private List<String> meta;
+
+    public Classifier() {
+        this.meta = new ArrayList<>();
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSlug() {
+        return slug;
+    }
+
+    public void setSlug(String slug) {
+        this.slug = slug;
+    }
+
+    public String getTaxonomy() {
+        return taxonomy;
+    }
+
+    public void setTaxonomy(String taxonomy) {
+        this.taxonomy = taxonomy;
+    }
+
+    public List<String> getMeta() {
+        return meta;
+    }
+
+    public void setMeta(List<String> meta) {
+        this.meta = meta;
+    }
+
+    @Override
+    public String toString() {
+        return this.name;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/ClassifierSearchCriteria.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/ClassifierSearchCriteria.java
new file mode 100644
index 0000000..6a50d8f
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/ClassifierSearchCriteria.java
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+public abstract class ClassifierSearchCriteria extends SearchCriteria {
+
+    private static final long serialVersionUID = -4265001661257396589L;
+
+    private boolean hideEmpty;
+    private Integer postId;
+    private String slug;
+    private Context context;
+
+    public ClassifierSearchCriteria() {
+
+    }
+
+    public boolean isHideEmpty() {
+        return hideEmpty;
+    }
+
+    public void setHideEmpty(boolean hideEmpty) {
+        this.hideEmpty = hideEmpty;
+    }
+
+    public Integer getPostId() {
+        return postId;
+    }
+
+    public void setPostId(Integer postId) {
+        this.postId = postId;
+    }
+
+    public String getSlug() {
+        return slug;
+    }
+
+    public void setSlug(String slug) {
+        this.slug = slug;
+    }
+
+    public Context getContext() {
+        return context;
+    }
+
+    public void setContext(Context context) {
+        this.context = context;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Comment.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Comment.java
new file mode 100644
index 0000000..6b1cb2f
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Comment.java
@@ -0,0 +1,215 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Comment implements Serializable {
+
+    private static final long serialVersionUID = -3246670470203927783L;
+
+    private Integer id;
+    private Integer author;
+    @JsonProperty("author_email")
+    private String authorEmail;
+    @JsonProperty("author_ip")
+    private String authorIp;
+    @JsonProperty("author_name")
+    private String authorName;
+    @JsonProperty("author_url")
+    private String authorUrl;
+    @JsonProperty("author_user_agent")
+    private String authorUserAgent;
+    private Content content;
+    private Date date;
+    @JsonProperty("date_gmt")
+    private Date dateGmt;
+    private Integer karma;
+    private String link;
+    private Integer parent;
+    @JsonProperty("post")
+    private Integer postId;
+    private String status;
+    private String type;
+    @JsonProperty("author_avatar_urls")
+    private List<String> authorAvatarUrls;
+    private List<String> meta;
+
+    public Comment() {
+        this.meta = new ArrayList<>();
+        this.authorAvatarUrls = new ArrayList<>();
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getAuthor() {
+        return author;
+    }
+
+    public void setAuthor(Integer author) {
+        this.author = author;
+    }
+
+    public String getAuthorEmail() {
+        return authorEmail;
+    }
+
+    public void setAuthorEmail(String authorEmail) {
+        this.authorEmail = authorEmail;
+    }
+
+    public String getAuthorIp() {
+        return authorIp;
+    }
+
+    public void setAuthorIp(String authorIp) {
+        this.authorIp = authorIp;
+    }
+
+    public String getAuthorName() {
+        return authorName;
+    }
+
+    public void setAuthorName(String authorName) {
+        this.authorName = authorName;
+    }
+
+    public String getAuthorUrl() {
+        return authorUrl;
+    }
+
+    public void setAuthorUrl(String authorUrl) {
+        this.authorUrl = authorUrl;
+    }
+
+    public String getAuthorUserAgent() {
+        return authorUserAgent;
+    }
+
+    public void setAuthorUserAgent(String authorUserAgent) {
+        this.authorUserAgent = authorUserAgent;
+    }
+
+    public Content getContent() {
+        return content;
+    }
+
+    public void setContent(Content content) {
+        this.content = content;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public Date getDateGmt() {
+        return dateGmt;
+    }
+
+    public void setDateGmt(Date dateGmt) {
+        this.dateGmt = dateGmt;
+    }
+
+    public Integer getKarma() {
+        return karma;
+    }
+
+    public void setKarma(Integer karma) {
+        this.karma = karma;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public Integer getParent() {
+        return parent;
+    }
+
+    public void setParent(Integer parent) {
+        this.parent = parent;
+    }
+
+    public Integer getPostId() {
+        return postId;
+    }
+
+    public void setPostId(Integer postId) {
+        this.postId = postId;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public List<String> getAuthorAvatarUrls() {
+        return authorAvatarUrls;
+    }
+
+    public void setAuthorAvatarUrls(List<String> authorAvatarUrls) {
+        this.authorAvatarUrls = authorAvatarUrls;
+    }
+
+    public List<String> getMeta() {
+        return meta;
+    }
+
+    public void setMeta(List<String> meta) {
+        this.meta = meta;
+    }
+
+    @Override
+    public String toString() {
+        // @formatter:off
+        return toStringHelper(this).add("ID", this.id).addValue(this.authorName).addValue(this.authorEmail).addValue(this.date).addValue(this.status).add("PostID", this.parent).toString();
+        // @formatter:on
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentOrderBy.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentOrderBy.java
new file mode 100644
index 0000000..50e2464
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentOrderBy.java
@@ -0,0 +1,21 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+public enum CommentOrderBy {
+    date, date_gmt, id, include, post, parent, type;
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentSearchCriteria.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentSearchCriteria.java
new file mode 100644
index 0000000..e6fdfca
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentSearchCriteria.java
@@ -0,0 +1,157 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.util.Date;
+import java.util.List;
+
+public class CommentSearchCriteria extends SearchCriteria {
+
+    private static final long serialVersionUID = -5004314052580565038L;
+
+    private Date after;
+    private Date before;
+    private List<Integer> author;
+    private List<Integer> authorExclude;
+    private String authorEmail;
+    private Integer karma;
+    private CommentOrderBy orderBy;
+    private List<Integer> offset;
+    private Context context;
+    private List<Integer> parent;
+    private List<Integer> parentExclude;
+    private List<Integer> post;
+    private CommentStatus status;
+    private String type;
+
+    public CommentSearchCriteria() {
+
+    }
+
+    public Date getAfter() {
+        return after;
+    }
+
+    public void setAfter(Date after) {
+        this.after = after;
+    }
+
+    public Date getBefore() {
+        return before;
+    }
+
+    public void setBefore(Date before) {
+        this.before = before;
+    }
+
+    public List<Integer> getAuthor() {
+        return author;
+    }
+
+    public void setAuthor(List<Integer> author) {
+        this.author = author;
+    }
+
+    public List<Integer> getAuthorExclude() {
+        return authorExclude;
+    }
+
+    public void setAuthorExclude(List<Integer> authorExclude) {
+        this.authorExclude = authorExclude;
+    }
+
+    public String getAuthorEmail() {
+        return authorEmail;
+    }
+
+    public void setAuthorEmail(String authorEmail) {
+        this.authorEmail = authorEmail;
+    }
+
+    public Integer getKarma() {
+        return karma;
+    }
+
+    public void setKarma(Integer karma) {
+        this.karma = karma;
+    }
+
+    public CommentOrderBy getOrderBy() {
+        return orderBy;
+    }
+
+    public void setOrderBy(CommentOrderBy orderBy) {
+        this.orderBy = orderBy;
+    }
+
+    public List<Integer> getOffset() {
+        return offset;
+    }
+
+    public void setOffset(List<Integer> offset) {
+        this.offset = offset;
+    }
+
+    public Context getContext() {
+        return context;
+    }
+
+    public void setContext(Context context) {
+        this.context = context;
+    }
+
+    public List<Integer> getParent() {
+        return parent;
+    }
+
+    public void setParent(List<Integer> parent) {
+        this.parent = parent;
+    }
+
+    public List<Integer> getParentExclude() {
+        return parentExclude;
+    }
+
+    public void setParentExclude(List<Integer> parentExclude) {
+        this.parentExclude = parentExclude;
+    }
+
+    public List<Integer> getPost() {
+        return post;
+    }
+
+    public void setPost(List<Integer> post) {
+        this.post = post;
+    }
+
+    public CommentStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(CommentStatus status) {
+        this.status = status;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentStatus.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentStatus.java
new file mode 100644
index 0000000..795d7b8
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/CommentStatus.java
@@ -0,0 +1,21 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+public enum CommentStatus {
+    approve;
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Content.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Content.java
new file mode 100644
index 0000000..99de814
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Content.java
@@ -0,0 +1,76 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+
+/**
+ * The Wordpress rendered content
+ */
+@JacksonXmlRootElement(localName = "content")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Content implements Serializable {
+
+    private static final long serialVersionUID = -6355688058047458932L;
+
+    private String rendered;
+    private String raw;
+
+    @JsonProperty("protected")
+    private Boolean protect;
+
+    public Content() {
+
+    }
+
+    public Content(String rendered) {
+        this.rendered = rendered;
+    }
+
+    public String getRendered() {
+        return rendered;
+    }
+
+    public void setRendered(String rendered) {
+        this.rendered = rendered;
+    }
+
+    public Boolean getProtect() {
+        return protect;
+    }
+
+    public void setProtect(Boolean protect) {
+        this.protect = protect;
+    }
+
+    public String getRaw() {
+        return raw;
+    }
+
+    public void setRaw(String raw) {
+        this.raw = raw;
+    }
+
+    @Override
+    public String toString() {
+        return this.rendered;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Context.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Context.java
new file mode 100644
index 0000000..7a9965e
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Context.java
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+/**
+ * Scope under which the request is made; determines fields present in response.
+ */
+public enum Context {
+    view, embed, edit;
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/DeletedModel.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/DeletedModel.java
new file mode 100644
index 0000000..daa8403
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/DeletedModel.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class DeletedModel<T> {
+
+    private Boolean deleted;
+    private T previous;
+
+    public DeletedModel() {
+
+    }
+
+    public Boolean getDeleted() {
+        return deleted;
+    }
+
+    public void setDeleted(Boolean deleted) {
+        this.deleted = deleted;
+    }
+
+    public T getPrevious() {
+        return previous;
+    }
+
+    public void setPrevious(T previous) {
+        this.previous = previous;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Format.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Format.java
new file mode 100644
index 0000000..7a2a79b
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Format.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+/**
+ * The format for the object.
+ */
+public enum Format {
+
+    standard;
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Media.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Media.java
new file mode 100644
index 0000000..33ac817
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Media.java
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+public class Media extends Publishable {
+
+    private static final long serialVersionUID = 3585407536958913479L;
+
+    public Media() {
+
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Order.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Order.java
new file mode 100644
index 0000000..bb7e862
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Order.java
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+/**
+ * Order sort attribute ascending or descending.
+ */
+public enum Order {
+    asc, desc;
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Page.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Page.java
new file mode 100644
index 0000000..efa6245
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Page.java
@@ -0,0 +1,52 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Page extends TextPublishable {
+
+    private static final long serialVersionUID = -3517585398919756299L;
+
+    private Integer parent;
+
+    @JsonProperty("menu_order")
+    private Integer menuOrder;
+
+    public Page() {
+
+    }
+
+    public Integer getParent() {
+        return parent;
+    }
+
+    public void setParent(Integer parent) {
+        this.parent = parent;
+    }
+
+    public Integer getMenuOrder() {
+        return menuOrder;
+    }
+
+    public void setMenuOrder(Integer menuOrder) {
+        this.menuOrder = menuOrder;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PageOrderBy.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PageOrderBy.java
new file mode 100644
index 0000000..f91c1f3
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PageOrderBy.java
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+/**
+ * Sort collection by object attribute.
+ */
+public enum PageOrderBy {
+    date, relevance, id, include, title, slug, menu_order;
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PageSearchCriteria.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PageSearchCriteria.java
new file mode 100644
index 0000000..e959440
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PageSearchCriteria.java
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+public class PageSearchCriteria extends PublishableSearchCriteria {
+
+    private static final long serialVersionUID = -166997518779286003L;
+
+    private Integer menuOrder;
+    private Integer parent;
+    private Integer parentExclude;
+    private String filter;
+    private PageOrderBy orderBy;
+
+    public PageOrderBy getOrderBy() {
+        return orderBy;
+    }
+
+    public void setOrderBy(PageOrderBy orderBy) {
+        this.orderBy = orderBy;
+    }
+
+    public Integer getMenuOrder() {
+        return menuOrder;
+    }
+
+    public void setMenuOrder(Integer menuOrder) {
+        this.menuOrder = menuOrder;
+    }
+
+    public Integer getParent() {
+        return parent;
+    }
+
+    public void setParent(Integer parent) {
+        this.parent = parent;
+    }
+
+    public Integer getParentExclude() {
+        return parentExclude;
+    }
+
+    public void setParentExclude(Integer parentExclude) {
+        this.parentExclude = parentExclude;
+    }
+
+    public String getFilter() {
+        return filter;
+    }
+
+    public void setFilter(String filter) {
+        this.filter = filter;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PingStatus.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PingStatus.java
new file mode 100644
index 0000000..7b8716e
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PingStatus.java
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+/**
+ * Whether or not the object can be pinged.
+ */
+public enum PingStatus {
+    open, closed;
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Post.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Post.java
new file mode 100644
index 0000000..c7a8451
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Post.java
@@ -0,0 +1,101 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+
+/**
+ * Represents a Wordpress Post.
+ */
+@JacksonXmlRootElement(localName = "post")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Post extends TextPublishable implements Serializable {
+
+    private static final long serialVersionUID = -2077181715632668792L;
+
+    private String password;
+
+    private Format format;
+
+    private Boolean stick;
+
+    private List<Integer> categories;
+
+    private List<Integer> tags;
+
+    @JsonProperty("liveblog_likes")
+    private Integer liveblogLikes;
+
+    public Post() {
+        this.categories = new ArrayList<>();
+        this.tags = new ArrayList<>();
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public Format getFormat() {
+        return format;
+    }
+
+    public void setFormat(Format format) {
+        this.format = format;
+    }
+
+    public Boolean isStick() {
+        return stick;
+    }
+
+    public void setStick(Boolean stick) {
+        this.stick = stick;
+    }
+
+    public List<Integer> getCategories() {
+        return categories;
+    }
+
+    public void setCategories(List<Integer> categories) {
+        this.categories = categories;
+    }
+
+    public List<Integer> getTags() {
+        return tags;
+    }
+
+    public void setTags(List<Integer> tags) {
+        this.tags = tags;
+    }
+
+    public Integer getLiveblogLikes() {
+        return liveblogLikes;
+    }
+
+    public void setLiveblogLikes(Integer liveblogLikes) {
+        this.liveblogLikes = liveblogLikes;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostCommentStatus.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostCommentStatus.java
new file mode 100644
index 0000000..ec89b51
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostCommentStatus.java
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+/**
+ * Whether or not comments are open on the object.
+ */
+public enum PostCommentStatus {
+    open, closed;
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostOrderBy.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostOrderBy.java
new file mode 100644
index 0000000..ab9765a
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostOrderBy.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+/**
+ * Sort collection by object attribute.
+ */
+public enum PostOrderBy {
+
+    author, date, id, include, modified, parent, relevance, slug, title;
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostRevision.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostRevision.java
new file mode 100644
index 0000000..7eae584
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostRevision.java
@@ -0,0 +1,87 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class PostRevision extends Publishable implements Serializable {
+
+    private static final long serialVersionUID = 4138540913280269413L;
+
+    private Integer parent;
+
+    private String guid;
+
+    private String title;
+
+    private String content;
+
+    private String excerpt;
+
+    public PostRevision() {
+
+    }
+
+    public String getGuid() {
+        return guid;
+    }
+
+    public void setGuid(String guid) {
+        this.guid = guid;
+    }
+
+    public Integer getParent() {
+        return parent;
+    }
+
+    public void setParent(Integer parent) {
+        this.parent = parent;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getExcerpt() {
+        return excerpt;
+    }
+
+    public void setExcerpt(String excerpt) {
+        this.excerpt = excerpt;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).add("ID", this.getId()).add("PostID", this.parent).addValue(this.getTitle()).toString();
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostSearchCriteria.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostSearchCriteria.java
new file mode 100644
index 0000000..6637c67
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PostSearchCriteria.java
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.util.List;
+
+public class PostSearchCriteria extends PublishableSearchCriteria {
+
+    private static final long serialVersionUID = 2663161640460268421L;
+
+    private List<String> categories;
+    private List<String> categoriesExclude;
+    private List<String> tags;
+    private List<String> tagsExclude;
+    private Boolean stick;
+    private PostOrderBy orderBy;
+
+    public PostOrderBy getOrderBy() {
+        return orderBy;
+    }
+
+    public void setOrderBy(PostOrderBy orderBy) {
+        this.orderBy = orderBy;
+    }
+
+    public List<String> getCategories() {
+        return categories;
+    }
+
+    public void setCategories(List<String> categories) {
+        this.categories = categories;
+    }
+
+    public List<String> getCategoriesExclude() {
+        return categoriesExclude;
+    }
+
+    public void setCategoriesExclude(List<String> categoriesExclude) {
+        this.categoriesExclude = categoriesExclude;
+    }
+
+    public List<String> getTags() {
+        return tags;
+    }
+
+    public void setTags(List<String> tags) {
+        this.tags = tags;
+    }
+
+    public List<String> getTagsExclude() {
+        return tagsExclude;
+    }
+
+    public void setTagsExclude(List<String> tagsExclude) {
+        this.tagsExclude = tagsExclude;
+    }
+
+    public Boolean getStick() {
+        return stick;
+    }
+
+    public void setStick(Boolean stick) {
+        this.stick = stick;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Publishable.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Publishable.java
new file mode 100644
index 0000000..b1357de
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Publishable.java
@@ -0,0 +1,115 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+
+/**
+ * Describes a object that has base properties for a {@link TextPublishable} object.
+ */
+@JacksonXmlRootElement(localName = "publishable")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public abstract class Publishable implements Serializable {
+
+    private static final long serialVersionUID = 5695150309094986591L;
+
+    private Integer id;
+
+    private Integer author;
+
+    private Date date;
+
+    @JsonProperty("date_gmt")
+    private Date dateGmt;
+
+    private Date modified;
+
+    @JsonProperty("modified_gmt")
+    private Date modifiedGmt;
+
+    private String slug;
+
+    public Publishable() {
+
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public Date getDateGmt() {
+        return dateGmt;
+    }
+
+    public void setDateGmt(Date dateGmt) {
+        this.dateGmt = dateGmt;
+    }
+
+    public Date getModified() {
+        return modified;
+    }
+
+    public void setModified(Date modified) {
+        this.modified = modified;
+    }
+
+    public Date getModifiedGmt() {
+        return modifiedGmt;
+    }
+
+    public void setModifiedGmt(Date modifiedGmt) {
+        this.modifiedGmt = modifiedGmt;
+    }
+
+    public String getSlug() {
+        return slug;
+    }
+
+    public void setSlug(String slug) {
+        this.slug = slug;
+    }
+
+    public Integer getAuthor() {
+        return author;
+    }
+
+    public void setAuthor(Integer author) {
+        this.author = author;
+    }
+
+    @Override
+    public String toString() {
+        return this.slug;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PublishableSearchCriteria.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PublishableSearchCriteria.java
new file mode 100644
index 0000000..efd9230
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PublishableSearchCriteria.java
@@ -0,0 +1,99 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.util.Date;
+import java.util.List;
+
+public abstract class PublishableSearchCriteria extends SearchCriteria {
+
+    private static final long serialVersionUID = 9178680514805178843L;
+
+    private Date after;
+    private Date before;
+    private List<Integer> author;
+    private List<Integer> authorExclude;
+    private List<Integer> offset;
+    private List<String> slug;
+    private PublishableStatus status;
+    private Context context;
+
+    public Date getAfter() {
+        return after;
+    }
+
+    public void setAfter(Date after) {
+        this.after = after;
+    }
+
+    public Date getBefore() {
+        return before;
+    }
+
+    public void setBefore(Date before) {
+        this.before = before;
+    }
+
+    public List<Integer> getAuthor() {
+        return author;
+    }
+
+    public void setAuthor(List<Integer> author) {
+        this.author = author;
+    }
+
+    public List<Integer> getAuthorExclude() {
+        return authorExclude;
+    }
+
+    public void setAuthorExclude(List<Integer> authorExclude) {
+        this.authorExclude = authorExclude;
+    }
+
+    public List<Integer> getOffset() {
+        return offset;
+    }
+
+    public void setOffset(List<Integer> offset) {
+        this.offset = offset;
+    }
+
+    public List<String> getSlug() {
+        return slug;
+    }
+
+    public void setSlug(List<String> slug) {
+        this.slug = slug;
+    }
+
+    public PublishableStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(PublishableStatus status) {
+        this.status = status;
+    }
+
+    public Context getContext() {
+        return context;
+    }
+
+    public void setContext(Context context) {
+        this.context = context;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PublishableStatus.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PublishableStatus.java
new file mode 100644
index 0000000..55cf8a7
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/PublishableStatus.java
@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+
+/**
+ * A named status for the object.
+ */
+@JacksonXmlRootElement(localName = "publishableStatus")
+public enum PublishableStatus {
+    // @formatter:off
+    publish, future, draft, pending, @JsonProperty("private")
+    private_, trash, @JsonProperty("auto-draft")
+    auto_draft, inherit, any;
+    // @formatter:on
+
+    /***
+     * @param arg
+     * @return
+     * @see <a href= "https://stackoverflow.com/questions/33357594/java-enum-case-insensitive-jersey-query-param-binding">Java: Enum case insensitive Jersey Query Param Binding</a>
+     */
+    public static PublishableStatus fromString(String arg) {
+        arg = "".concat(arg).toLowerCase();
+        if (!arg.isEmpty() && arg.startsWith("private")) {
+            return private_;
+        }
+        if (!arg.isEmpty() && arg.startsWith("auto")) {
+            return auto_draft;
+        }
+
+        return valueOf(arg);
+    }
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/SearchCriteria.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/SearchCriteria.java
new file mode 100644
index 0000000..d1fb5e9
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/SearchCriteria.java
@@ -0,0 +1,92 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.io.Serializable;
+import java.util.List;
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+public class SearchCriteria implements Serializable {
+
+    private static final long serialVersionUID = 1002576245120313648L;
+
+    private Integer page;
+    private Integer perPage;
+    private String search;
+    private Order order;
+    private List<Integer> exclude;
+    private List<Integer> include;
+
+    public SearchCriteria() {
+
+    }
+
+    public Integer getPage() {
+        return page;
+    }
+
+    public void setPage(Integer page) {
+        this.page = page;
+    }
+
+    public Integer getPerPage() {
+        return perPage;
+    }
+
+    public void setPerPage(Integer perPage) {
+        this.perPage = perPage;
+    }
+
+    public String getSearch() {
+        return search;
+    }
+
+    public void setSearch(String search) {
+        this.search = search;
+    }
+
+    public Order getOrder() {
+        return order;
+    }
+
+    public void setOrder(Order order) {
+        this.order = order;
+    }
+
+    public List<Integer> getExclude() {
+        return exclude;
+    }
+
+    public void setExclude(List<Integer> exclude) {
+        this.exclude = exclude;
+    }
+
+    public List<Integer> getInclude() {
+        return include;
+    }
+
+    public void setInclude(List<Integer> include) {
+        this.include = include;
+    }
+
+    @Override
+    public String toString() {
+        // @formatter:off
+        return toStringHelper(this).add("Query", this.search).add("Page", page).add("Per Page", perPage).addValue(this.order).toString();
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Tag.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Tag.java
new file mode 100644
index 0000000..6d09f06
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Tag.java
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Tag extends Classifier implements Serializable {
+
+    private static final long serialVersionUID = 1999287860335998496L;
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TagOrderBy.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TagOrderBy.java
new file mode 100644
index 0000000..50288d1
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TagOrderBy.java
@@ -0,0 +1,21 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+public enum TagOrderBy {
+    id, include, name, slug, term_group, description, count;
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TagSearchCriteria.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TagSearchCriteria.java
new file mode 100644
index 0000000..85ab7f3
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TagSearchCriteria.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.util.List;
+
+public class TagSearchCriteria extends ClassifierSearchCriteria {
+
+    private static final long serialVersionUID = 3602397960341909720L;
+
+    private List<Integer> offset;
+    private TagOrderBy orderBy;
+
+    public TagSearchCriteria() {
+
+    }
+
+    public List<Integer> getOffset() {
+        return offset;
+    }
+
+    public void setOffset(List<Integer> offset) {
+        this.offset = offset;
+    }
+
+    public TagOrderBy getOrderBy() {
+        return orderBy;
+    }
+
+    public void setOrderBy(TagOrderBy orderBy) {
+        this.orderBy = orderBy;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Taxonomy.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Taxonomy.java
new file mode 100644
index 0000000..2586189
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/Taxonomy.java
@@ -0,0 +1,120 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Taxonomy implements Serializable {
+
+    private static final long serialVersionUID = 390452251497218257L;
+    private String name;
+    private String slug;
+    private String description;
+    private boolean hierarchical;
+    @JsonProperty("rest_base")
+    private String restBase;
+    @JsonProperty("show_cloud")
+    private boolean showCloud;
+    private List<Map<String, String>> capabilities;
+    private List<String> labels;
+    private List<String> types;
+
+    public Taxonomy() {
+        this.capabilities = new ArrayList<>();
+        this.labels = new ArrayList<>();
+        this.types = new ArrayList<>();
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSlug() {
+        return slug;
+    }
+
+    public void setSlug(String slug) {
+        this.slug = slug;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public boolean isHierarchical() {
+        return hierarchical;
+    }
+
+    public void setHierarchical(boolean hierarchical) {
+        this.hierarchical = hierarchical;
+    }
+
+    public String getRestBase() {
+        return restBase;
+    }
+
+    public void setRestBase(String restBase) {
+        this.restBase = restBase;
+    }
+
+    public boolean isShowCloud() {
+        return showCloud;
+    }
+
+    public void setShowCloud(boolean showCloud) {
+        this.showCloud = showCloud;
+    }
+
+    public List<Map<String, String>> getCapabilities() {
+        return capabilities;
+    }
+
+    public void setCapabilities(List<Map<String, String>> capabilities) {
+        this.capabilities = capabilities;
+    }
+
+    public List<String> getLabels() {
+        return labels;
+    }
+
+    public void setLabels(List<String> labels) {
+        this.labels = labels;
+    }
+
+    public List<String> getTypes() {
+        return types;
+    }
+
+    public void setTypes(List<String> types) {
+        this.types = types;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TextPublishable.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TextPublishable.java
new file mode 100644
index 0000000..e3f3827
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/TextPublishable.java
@@ -0,0 +1,167 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * Describes a object that may be published on the Wordpress engine, eg. a Post, a Page etc.
+ */
+@JacksonXmlRootElement(localName = "textPublishable")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public abstract class TextPublishable extends Publishable {
+
+    private static final long serialVersionUID = -2913318702739560478L;
+
+    private Content guid;
+
+    private String link;
+
+    private PublishableStatus status;
+
+    private String type;
+
+    private Content title;
+
+    private Content content;
+
+    private Content excerpt;
+
+    private String template;
+
+    private List<Content> meta;
+
+    @JsonProperty("comment_status")
+    private PostCommentStatus commentStatus;
+
+    @JsonProperty("ping_status")
+    private PingStatus pingStatus;
+
+    @JsonProperty("featured_media")
+    private Integer featuredMedia;
+
+    public TextPublishable() {
+
+    }
+
+    public Content getTitle() {
+        return title;
+    }
+
+    public void setTitle(Content title) {
+        this.title = title;
+    }
+
+    public Content getContent() {
+        return content;
+    }
+
+    public void setContent(Content content) {
+        this.content = content;
+    }
+
+    public Content getExcerpt() {
+        return excerpt;
+    }
+
+    public void setExcerpt(Content excerpt) {
+        this.excerpt = excerpt;
+    }
+
+    public Content getGuid() {
+        return guid;
+    }
+
+    public void setGuid(Content guid) {
+        this.guid = guid;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public PublishableStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(PublishableStatus status) {
+        this.status = status;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public Integer getFeaturedMedia() {
+        return featuredMedia;
+    }
+
+    public void setFeaturedMedia(Integer featuredMedia) {
+        this.featuredMedia = featuredMedia;
+    }
+
+    public PostCommentStatus getCommentStatus() {
+        return commentStatus;
+    }
+
+    public void setCommentStatus(PostCommentStatus commentStatus) {
+        this.commentStatus = commentStatus;
+    }
+
+    public PingStatus getPingStatus() {
+        return pingStatus;
+    }
+
+    public void setPingStatus(PingStatus pingStatus) {
+        this.pingStatus = pingStatus;
+    }
+
+    public List<Content> getMeta() {
+        return meta;
+    }
+
+    public void setMeta(List<Content> meta) {
+        this.meta = meta;
+    }
+
+    public String getTemplate() {
+        return template;
+    }
+
+    public void setTemplate(String template) {
+        this.template = template;
+    }
+
+    // @formatter:off
+    @Override
+    public String toString() {
+        return toStringHelper(this).add("ID", this.getId()).add("Status", this.getStatus()).addValue(this.guid).addValue(this.getTitle()).toString();
+    }
+    // @formatter:on
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/User.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/User.java
new file mode 100644
index 0000000..bdcba62
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/User.java
@@ -0,0 +1,211 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+@JacksonXmlRootElement
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class User implements Serializable {
+
+    private static final long serialVersionUID = 4247427179764560935L;
+
+    private Integer id;
+    private String username;
+    private String name;
+    @JsonProperty("first_name")
+    private String firstName;
+    @JsonProperty("last_name")
+    private String lastName;
+    private String email;
+    private String url;
+    private String description;
+    private String link;
+    private String locale;
+    private String nickname;
+    private String slug;
+    @JsonProperty("registered_date")
+    private String registeredDate;
+    private List<String> roles;
+    private Map<String, String> capabilities;
+    @JsonProperty("extra_capabilities")
+    private Map<String, String> extraCapabilities;
+    @JsonProperty("avatar_urls")
+    private Map<String, String> avatarUrls;
+    @JsonProperty("meta")
+    private List<Map<String, String>> meta;
+
+    public User() {
+
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public String getLocale() {
+        return locale;
+    }
+
+    public void setLocale(String locale) {
+        this.locale = locale;
+    }
+
+    public String getNickname() {
+        return nickname;
+    }
+
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
+
+    public String getSlug() {
+        return slug;
+    }
+
+    public void setSlug(String slug) {
+        this.slug = slug;
+    }
+
+    public String getRegisteredDate() {
+        return registeredDate;
+    }
+
+    public void setRegisteredDate(String registeredDate) {
+        this.registeredDate = registeredDate;
+    }
+
+    public List<String> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(List<String> roles) {
+        this.roles = roles;
+    }
+
+    public Map<String, String> getCapabilities() {
+        return capabilities;
+    }
+
+    public void setCapabilities(Map<String, String> capabilities) {
+        this.capabilities = capabilities;
+    }
+
+    public Map<String, String> getExtraCapabilities() {
+        return extraCapabilities;
+    }
+
+    public void setExtraCapabilities(Map<String, String> extraCapabilities) {
+        this.extraCapabilities = extraCapabilities;
+    }
+
+    public Map<String, String> getAvatarUrls() {
+        return avatarUrls;
+    }
+
+    public void setAvatarUrls(Map<String, String> avatarUrls) {
+        this.avatarUrls = avatarUrls;
+    }
+
+    public List<Map<String, String>> getMeta() {
+        return meta;
+    }
+
+    public void setMeta(List<Map<String, String>> meta) {
+        this.meta = meta;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).addValue(this.id).addValue(this.username).addValue(this.email).addValue(this.name).toString();
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/UserOrderBy.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/UserOrderBy.java
new file mode 100644
index 0000000..cea844a
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/UserOrderBy.java
@@ -0,0 +1,21 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+public enum UserOrderBy {
+    id, include, name, registered_date, slug, email, url;
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/UserSearchCriteria.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/UserSearchCriteria.java
new file mode 100644
index 0000000..7427de5
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/model/UserSearchCriteria.java
@@ -0,0 +1,75 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import java.util.List;
+
+public class UserSearchCriteria extends SearchCriteria {
+
+    private static final long serialVersionUID = 6531943297389260204L;
+
+    private Context context;
+    private List<Integer> offset;
+    private UserOrderBy orderBy;
+    private List<String> roles;
+    private List<String> slug;
+
+    public UserSearchCriteria() {
+
+    }
+
+    public Context getContext() {
+        return context;
+    }
+
+    public void setContext(Context context) {
+        this.context = context;
+    }
+
+    public List<Integer> getOffset() {
+        return offset;
+    }
+
+    public void setOffset(List<Integer> offset) {
+        this.offset = offset;
+    }
+
+    public UserOrderBy getOrderBy() {
+        return orderBy;
+    }
+
+    public void setOrderBy(UserOrderBy orderBy) {
+        this.orderBy = orderBy;
+    }
+
+    public List<String> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(List<String> roles) {
+        this.roles = roles;
+    }
+
+    public List<String> getSlug() {
+        return slug;
+    }
+
+    public void setSlug(List<String> slug) {
+        this.slug = slug;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressCrudService.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressCrudService.java
new file mode 100644
index 0000000..37583e0
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressCrudService.java
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.DeletedModel;
+import org.apache.camel.component.wordpress.api.model.SearchCriteria;
+
+/**
+ * Common interface for services performing CRUD operations
+ * 
+ * @param <T> model type
+ * @param <S> {@link SearchCriteria} used for this model
+ */
+public interface WordpressCrudService<T, S extends SearchCriteria> extends WordpressService {
+
+    T retrieve(Integer entityID, Context context);
+
+    T retrieve(Integer entityID);
+
+    T create(T entity);
+
+    T delete(Integer entityID);
+
+    DeletedModel<T> forceDelete(Integer entityID);
+
+    List<T> list(S searchCriteria);
+
+    T update(Integer entityID, T entity);
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressService.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressService.java
new file mode 100644
index 0000000..37e6dd5
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressService.java
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service;
+
+import org.apache.camel.component.wordpress.api.auth.WordpressAuthentication;
+
+/**
+ * Common interface for Wordpress Service adapters.
+ */
+public interface WordpressService {
+
+    /**
+     * Sets the Wordpress Authentication Model
+     * 
+     * @param authentication
+     */
+    void setWordpressAuthentication(WordpressAuthentication authentication);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceCategories.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceCategories.java
new file mode 100644
index 0000000..24d62f3
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceCategories.java
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service;
+
+import org.apache.camel.component.wordpress.api.model.Category;
+import org.apache.camel.component.wordpress.api.model.CategorySearchCriteria;
+
+public interface WordpressServiceCategories extends WordpressCrudService<Category, CategorySearchCriteria> {
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceComments.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceComments.java
new file mode 100644
index 0000000..258b719
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceComments.java
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service;
+
+import org.apache.camel.component.wordpress.api.model.Comment;
+import org.apache.camel.component.wordpress.api.model.CommentSearchCriteria;
+
+public interface WordpressServiceComments extends WordpressCrudService<Comment, CommentSearchCriteria> {
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePages.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePages.java
new file mode 100644
index 0000000..cc2df1c
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePages.java
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service;
+
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.Page;
+import org.apache.camel.component.wordpress.api.model.PageSearchCriteria;
+
+public interface WordpressServicePages extends WordpressCrudService<Page, PageSearchCriteria> {
+
+    Page retrieve(Integer pageId, Context context, String password);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePostRevision.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePostRevision.java
new file mode 100644
index 0000000..65d75f2
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePostRevision.java
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.PostRevision;
+
+public interface WordpressServicePostRevision extends WordpressService {
+
+    void delete(Integer postId, Integer revisionId);
+
+    PostRevision retrieve(Integer postId, Integer revisionId, Context context);
+
+    List<PostRevision> list(Integer postId, Context context);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePosts.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePosts.java
new file mode 100644
index 0000000..0d95898
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServicePosts.java
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service;
+
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.Post;
+import org.apache.camel.component.wordpress.api.model.PostSearchCriteria;
+
+public interface WordpressServicePosts extends WordpressCrudService<Post, PostSearchCriteria> {
+
+    /**
+     * Default endpoint.
+     * 
+     * @param postId
+     * @param context
+     * @param password
+     * @return
+     */
+    Post retrieve(Integer postId, Context context, String password);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceTags.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceTags.java
new file mode 100644
index 0000000..e2bc980
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceTags.java
@@ -0,0 +1,23 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service;
+
+import org.apache.camel.component.wordpress.api.model.Tag;
+import org.apache.camel.component.wordpress.api.model.TagSearchCriteria;
+
+public interface WordpressServiceTags extends WordpressCrudService<Tag, TagSearchCriteria> {
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceTaxonomy.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceTaxonomy.java
new file mode 100644
index 0000000..cff12c0
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceTaxonomy.java
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service;
+
+import java.util.Map;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.Taxonomy;
+
+public interface WordpressServiceTaxonomy extends WordpressService {
+
+    Map<String, Taxonomy> list(Context context, String postType);
+
+    Taxonomy retrieve(Context context, String taxonomy);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceUsers.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceUsers.java
new file mode 100644
index 0000000..41b4b74
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/WordpressServiceUsers.java
@@ -0,0 +1,23 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service;
+
+import org.apache.camel.component.wordpress.api.model.User;
+import org.apache.camel.component.wordpress.api.model.UserSearchCriteria;
+
+public interface WordpressServiceUsers extends WordpressCrudService<User, UserSearchCriteria> {
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/AbstractWordpressCrudServiceAdapter.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/AbstractWordpressCrudServiceAdapter.java
new file mode 100644
index 0000000..63aef67
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/AbstractWordpressCrudServiceAdapter.java
@@ -0,0 +1,89 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl;
+
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.DeletedModel;
+import org.apache.camel.component.wordpress.api.model.SearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressCrudService;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Base service adapter implementation with CRUD commons operations.
+ * 
+ * @param <A>
+ * @param <T>
+ */
+abstract class AbstractWordpressCrudServiceAdapter<A, T, S extends SearchCriteria> extends AbstractWordpressServiceAdapter<A> implements WordpressCrudService<T, S> {
+
+    AbstractWordpressCrudServiceAdapter(final String wordpressUrl, final String apiVersion) {
+        super(wordpressUrl, apiVersion);
+    }
+
+    public final T create(T object) {
+        checkNotNull(object, "Please define an object to create");
+        return this.doCreate(object);
+    }
+
+    protected abstract T doCreate(T object);
+
+    public final T delete(Integer id) {
+        checkArgument(id > 0, "The id is mandatory");
+        return this.doDelete(id);
+    }
+
+    public final DeletedModel<T> forceDelete(Integer id) {
+        checkArgument(id > 0, "The id is mandatory");
+        return this.doForceDelete(id);
+    }
+
+    protected abstract T doDelete(Integer id);
+
+    protected DeletedModel<T> doForceDelete(Integer id) {
+        final DeletedModel<T> deletedModel = new DeletedModel<>();
+
+        deletedModel.setPrevious(this.doDelete(id));
+        deletedModel.setDeleted(false);
+
+        return deletedModel;
+    }
+
+    public final T update(Integer id, T object) {
+        checkNotNull(object, "Please define an object to update");
+        checkArgument(id > 0, "The id is mandatory");
+        return this.doUpdate(id, object);
+    }
+
+    protected abstract T doUpdate(Integer id, T object);
+
+    @Override
+    public T retrieve(Integer entityID) {
+        return this.retrieve(entityID, Context.view);
+    }
+
+    @Override
+    public final T retrieve(Integer entityID, Context context) {
+        checkArgument(entityID > 0, "Please provide a non zero id");
+        checkNotNull(context, "Provide a context");
+        // return this.getSpi().retrieve(getApiVersion(), entityID, context);
+        return doRetrieve(entityID, context);
+    }
+
+    protected abstract T doRetrieve(Integer entityID, Context context);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/AbstractWordpressServiceAdapter.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/AbstractWordpressServiceAdapter.java
new file mode 100644
index 0000000..59037e8
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/AbstractWordpressServiceAdapter.java
@@ -0,0 +1,81 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl;
+
+import java.util.Collections;
+import javax.ws.rs.core.MediaType;
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+import org.apache.camel.component.wordpress.api.auth.WordpressAuthentication;
+import org.apache.camel.component.wordpress.api.service.WordpressService;
+import org.apache.cxf.interceptor.LoggingInInterceptor;
+import org.apache.cxf.interceptor.LoggingOutInterceptor;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Strings.emptyToNull;
+
+abstract class AbstractWordpressServiceAdapter<A> implements WordpressService {
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractWordpressServiceAdapter.class);
+
+    private A spi;
+
+    private final String apiVersion;
+    private WordpressAuthentication authentication;
+
+    AbstractWordpressServiceAdapter(final String wordpressUrl, final String apiVersion) {
+        checkNotNull(emptyToNull(apiVersion));
+        this.apiVersion = apiVersion;
+
+        // @formatter:off
+        this.spi = JAXRSClientFactory.create(wordpressUrl, this.getSpiType(), Collections.singletonList(new JacksonJsonProvider()));
+        // @formatter:on
+        WebClient.client(spi).type(MediaType.APPLICATION_JSON_TYPE);
+        WebClient.client(spi).accept(MediaType.APPLICATION_JSON_TYPE);
+
+        // TODO: leave this kind of configuration to API clients
+        WebClient.getConfig(spi).getHttpConduit().getClient().setAutoRedirect(true);
+
+        /*
+         * TODO: aggregate a configuration object to customize the JAXRS behavior, eg.: adding handlers or interceptors
+         */
+        WebClient.getConfig(spi).getInInterceptors().add(new LoggingInInterceptor());
+        WebClient.getConfig(spi).getOutInterceptors().add(new LoggingOutInterceptor());
+
+        if (this.authentication != null) {
+            this.authentication.configureAuthentication(spi);
+        }
+
+        LOGGER.info("******* {} API initialized *********", spi.getClass().getSimpleName());
+    }
+
+    protected abstract Class<A> getSpiType();
+
+    protected final A getSpi() {
+        return spi;
+    }
+
+    protected final String getApiVersion() {
+        return this.apiVersion;
+    }
+
+    @Override
+    public final void setWordpressAuthentication(WordpressAuthentication authentication) {
+        this.authentication = authentication;
+    }
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceCategoriesAdapter.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceCategoriesAdapter.java
new file mode 100644
index 0000000..07b7ab9
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceCategoriesAdapter.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.api.model.Category;
+import org.apache.camel.component.wordpress.api.model.CategorySearchCriteria;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceCategories;
+import org.apache.camel.component.wordpress.api.service.spi.CategoriesSPI;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class WordpressServiceCategoriesAdapter extends AbstractWordpressCrudServiceAdapter<CategoriesSPI, Category, CategorySearchCriteria> implements WordpressServiceCategories {
+
+    public WordpressServiceCategoriesAdapter(String wordpressUrl, String apiVersion) {
+        super(wordpressUrl, apiVersion);
+    }
+
+    @Override
+    protected Class<CategoriesSPI> getSpiType() {
+        return CategoriesSPI.class;
+    }
+
+    // @formatter:off
+    @Override
+    public List<Category> list(CategorySearchCriteria criteria) {
+        checkNotNull(criteria, "The search criteria must be defined");
+        return getSpi().list(this.getApiVersion(), criteria.getContext(), criteria.getPage(), criteria.getPerPage(), criteria.getSearch(), criteria.getExclude(), criteria.getInclude(),
+                             criteria.getOrder(), criteria.getOrderBy(), criteria.isHideEmpty(), criteria.getParent(), criteria.getPostId(), criteria.getSlug());
+    }
+    // @formatter:on
+
+    @Override
+    protected Category doCreate(Category object) {
+        return getSpi().create(getApiVersion(), object);
+    }
+
+    @Override
+    protected Category doDelete(Integer id) {
+        return getSpi().delete(getApiVersion(), id, false);
+    }
+
+    @Override
+    protected Category doUpdate(Integer id, Category object) {
+        return getSpi().update(getApiVersion(), id, object);
+    }
+
+    @Override
+    protected Category doRetrieve(Integer entityID, Context context) {
+        return getSpi().retrieve(getApiVersion(), entityID, context);
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceCommentsAdapter.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceCommentsAdapter.java
new file mode 100644
index 0000000..bfb25b7
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceCommentsAdapter.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.api.model.Comment;
+import org.apache.camel.component.wordpress.api.model.CommentSearchCriteria;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceComments;
+import org.apache.camel.component.wordpress.api.service.spi.CommentsSPI;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class WordpressServiceCommentsAdapter extends AbstractWordpressCrudServiceAdapter<CommentsSPI, Comment, CommentSearchCriteria> implements WordpressServiceComments {
+
+    public WordpressServiceCommentsAdapter(final String wordpressUrl, final String apiVersion) {
+        super(wordpressUrl, apiVersion);
+    }
+
+    @Override
+    protected Class<CommentsSPI> getSpiType() {
+        return CommentsSPI.class;
+    }
+
+    // @formatter:off
+    @Override
+    public List<Comment> list(CommentSearchCriteria c) {
+        checkNotNull(c, "The search criteria must be defined");
+        return getSpi().list(this.getApiVersion(), c.getContext(), c.getPage(), c.getPerPage(), c.getSearch(), c.getAfter(), c.getAuthor(), c.getAuthorExclude(), c.getAuthorEmail(), c.getBefore(),
+                             c.getExclude(), c.getInclude(), c.getKarma(), c.getOffset(), c.getOrder(), c.getOrderBy(), c.getParent(), c.getParentExclude(), c.getPost(), c.getStatus(), c.getType());
+    }
+    // @formatter:on
+
+    @Override
+    protected Comment doCreate(Comment object) {
+        return getSpi().create(getApiVersion(), object);
+    }
+
+    @Override
+    protected Comment doDelete(Integer id) {
+        return getSpi().delete(getApiVersion(), id, false);
+    }
+
+    @Override
+    protected Comment doUpdate(Integer id, Comment object) {
+        return getSpi().update(getApiVersion(), id, object);
+    }
+
+    @Override
+    protected Comment doRetrieve(Integer entityID, Context context) {
+        return getSpi().retrieve(getApiVersion(), entityID, context);
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePagesAdapter.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePagesAdapter.java
new file mode 100644
index 0000000..a1cb95a
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePagesAdapter.java
@@ -0,0 +1,88 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.Page;
+import org.apache.camel.component.wordpress.api.model.PageSearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServicePages;
+import org.apache.camel.component.wordpress.api.service.WordpressServicePosts;
+import org.apache.camel.component.wordpress.api.service.spi.PagesSPI;
+import org.apache.camel.component.wordpress.api.service.spi.PostsSPI;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * The {@link WordpressServicePosts} implementation. Aggregates the {@link PostsSPI} interface using {@link JAXRSClientFactory} to make the API calls.
+ * 
+ * @since 0.0.1
+ */
+public class WordpressServicePagesAdapter extends AbstractWordpressCrudServiceAdapter<PagesSPI, Page, PageSearchCriteria> implements WordpressServicePages {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(WordpressServicePagesAdapter.class);
+
+    public WordpressServicePagesAdapter(String wordpressUrl, String apiVersion) {
+        super(wordpressUrl, apiVersion);
+    }
+
+    @Override
+    protected Class<PagesSPI> getSpiType() {
+        return PagesSPI.class;
+    }
+
+    // @formatter:off
+    @Override
+    public List<Page> list(PageSearchCriteria c) {
+        LOGGER.debug("Calling list pages: searchCriteria {}", c);
+        checkNotNull(c, "Please provide a search criteria");
+        return getSpi().list(this.getApiVersion(), c.getContext(), c.getPage(), c.getPerPage(), c.getSearch(), c.getAfter(), c.getAuthor(), c.getAuthorExclude(), c.getBefore(), c.getExclude(),
+                             c.getInclude(), c.getMenuOrder(), c.getOffset(), c.getOrder(), c.getOrderBy(), c.getParent(), c.getParentExclude(), c.getSlug(), c.getStatus(), c.getFilter());
+    }
+    // @formatter:on
+
+    @Override
+    public Page retrieve(Integer pageId, Context context, String password) {
+        LOGGER.debug("Calling retrieve: postId {};  context: {}", pageId, context);
+        checkArgument(pageId > 0, "Please provide a non zero post id");
+        return getSpi().retrieve(this.getApiVersion(), pageId, context, password);
+    }
+
+    @Override
+    protected Page doCreate(Page object) {
+        return getSpi().create(getApiVersion(), object);
+    }
+
+    @Override
+    protected Page doDelete(Integer id) {
+        return getSpi().delete(getApiVersion(), id, false);
+    }
+
+    @Override
+    protected Page doUpdate(Integer id, Page object) {
+        return getSpi().update(getApiVersion(), id, object);
+    }
+
+    @Override
+    protected Page doRetrieve(Integer entityID, Context context) {
+        return getSpi().retrieve(getApiVersion(), entityID, context, null);
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapter.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapter.java
new file mode 100644
index 0000000..ed729ac
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapter.java
@@ -0,0 +1,97 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.DeletedModel;
+import org.apache.camel.component.wordpress.api.model.Post;
+import org.apache.camel.component.wordpress.api.model.PostSearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServicePosts;
+import org.apache.camel.component.wordpress.api.service.spi.PostsSPI;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * The {@link WordpressServicePosts} implementation. Aggregates the {@link PostsSPI} interface using {@link JAXRSClientFactory} to make the API calls.
+ * 
+ * @since 0.0.1
+ */
+public class WordpressServicePostsAdapter extends AbstractWordpressCrudServiceAdapter<PostsSPI, Post, PostSearchCriteria> implements WordpressServicePosts {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(WordpressServicePostsAdapter.class);
+
+    public WordpressServicePostsAdapter(final String wordpressUrl, final String apiVersion) {
+        super(wordpressUrl, apiVersion);
+    }
+
+    @Override
+    protected Class<PostsSPI> getSpiType() {
+        return PostsSPI.class;
+    }
+
+    @Override
+    public List<Post> list(PostSearchCriteria criteria) {
+        LOGGER.debug("Calling list posts: searchCriteria {}", criteria);
+        checkNotNull(criteria, "Please provide a search criteria");
+        return getSpi().list(this.getApiVersion(), criteria.getContext(), criteria.getPage(), criteria.getPerPage(), criteria.getSearch(), criteria.getAfter(), criteria.getAuthor(),
+                             criteria.getAuthorExclude(), criteria.getBefore(), criteria.getExclude(), criteria.getInclude(), criteria.getOffset(), criteria.getOrder(), criteria.getOrderBy(),
+                             criteria.getSlug(), criteria.getStatus(), criteria.getCategories(), criteria.getCategoriesExclude(), criteria.getTags(), criteria.getTagsExclude(), criteria.getStick());
+    }
+
+    @Override
+    public Post retrieve(Integer postId, Context context, String password) {
+        LOGGER.debug("Calling retrievePosts: postId {};  postContext: {}", postId, context);
+        checkArgument(postId > 0, "Please provide a non zero post id");
+        checkNotNull(context, "Provide a post context");
+        return getSpi().retrieve(this.getApiVersion(), postId, context, password);
+    }
+
+    @Override
+    protected Post doRetrieve(Integer postId, Context context) {
+        return this.retrieve(postId, context, "");
+    }
+
+    @Override
+    public Post retrieve(Integer postId) {
+        return this.retrieve(postId, Context.view, "");
+    }
+
+    @Override
+    protected Post doCreate(Post object) {
+        return getSpi().create(this.getApiVersion(), object);
+    }
+
+    @Override
+    protected Post doDelete(Integer id) {
+        return getSpi().delete(getApiVersion(), id);
+    }
+
+    @Override
+    protected DeletedModel<Post> doForceDelete(Integer id) {
+        return getSpi().forceDelete(getApiVersion(), id);
+    }
+
+    @Override
+    protected Post doUpdate(Integer id, Post object) {
+        return getSpi().update(getApiVersion(), id, object);
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceTagsAdapter.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceTagsAdapter.java
new file mode 100644
index 0000000..d6b2136
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceTagsAdapter.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.Tag;
+import org.apache.camel.component.wordpress.api.model.TagSearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceTags;
+import org.apache.camel.component.wordpress.api.service.spi.TagsSPI;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class WordpressServiceTagsAdapter extends AbstractWordpressCrudServiceAdapter<TagsSPI, Tag, TagSearchCriteria> implements WordpressServiceTags {
+
+    public WordpressServiceTagsAdapter(String wordpressUrl, String apiVersion) {
+        super(wordpressUrl, apiVersion);
+    }
+
+    @Override
+    protected Class<TagsSPI> getSpiType() {
+        return TagsSPI.class;
+    }
+
+    // @formatter:off
+    @Override
+    public List<Tag> list(TagSearchCriteria criteria) {
+        checkNotNull(criteria, "The search criteria must be defined");
+        return this.getSpi().list(this.getApiVersion(), criteria.getContext(), criteria.getPage(), criteria.getPerPage(), criteria.getSearch(), criteria.getExclude(), criteria.getInclude(),
+                                  criteria.getOffset(), criteria.getOrder(), criteria.getOrderBy(), criteria.isHideEmpty(), criteria.getPostId(), criteria.getSlug());
+    }
+    // @formatter:on
+
+    @Override
+    protected Tag doCreate(Tag object) {
+        return getSpi().create(getApiVersion(), object);
+    }
+
+    @Override
+    protected Tag doDelete(Integer id) {
+        return getSpi().delete(getApiVersion(), id, false);
+    }
+
+    @Override
+    protected Tag doUpdate(Integer id, Tag object) {
+        return getSpi().update(getApiVersion(), id, object);
+    }
+
+    @Override
+    protected Tag doRetrieve(Integer entityID, Context context) {
+        return getSpi().retrieve(getApiVersion(), entityID, context);
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceTaxonomyAdapter.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceTaxonomyAdapter.java
new file mode 100644
index 0000000..2e60700
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceTaxonomyAdapter.java
@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl;
+
+import java.util.Map;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.Taxonomy;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceTaxonomy;
+import org.apache.camel.component.wordpress.api.service.spi.TaxonomySPI;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Strings.emptyToNull;
+
+public class WordpressServiceTaxonomyAdapter extends AbstractWordpressServiceAdapter<TaxonomySPI> implements WordpressServiceTaxonomy {
+
+    public WordpressServiceTaxonomyAdapter(String wordpressUrl, String apiVersion) {
+        super(wordpressUrl, apiVersion);
+    }
+
+    @Override
+    protected Class<TaxonomySPI> getSpiType() {
+        return TaxonomySPI.class;
+    }
+
+    @Override
+    public Map<String, Taxonomy> list(Context context, String postType) {
+        return getSpi().list(this.getApiVersion(), context, postType);
+    }
+
+    @Override
+    public Taxonomy retrieve(Context context, String taxonomy) {
+        checkNotNull(emptyToNull(taxonomy), "Please define a taxonomy");
+        return getSpi().retrieve(this.getApiVersion(), context, taxonomy);
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceUsersAdapter.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceUsersAdapter.java
new file mode 100644
index 0000000..e5165e1
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceUsersAdapter.java
@@ -0,0 +1,70 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.DeletedModel;
+import org.apache.camel.component.wordpress.api.model.User;
+import org.apache.camel.component.wordpress.api.model.UserSearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceUsers;
+import org.apache.camel.component.wordpress.api.service.spi.UsersSPI;
+
+public class WordpressServiceUsersAdapter extends AbstractWordpressCrudServiceAdapter<UsersSPI, User, UserSearchCriteria> implements WordpressServiceUsers {
+
+    public WordpressServiceUsersAdapter(String wordpressUrl, String apiVersion) {
+        super(wordpressUrl, apiVersion);
+    }
+
+    @Override
+    public List<User> list(UserSearchCriteria s) {
+        // @formatter:off
+        return getSpi().list(getApiVersion(), s.getContext(), s.getPage(), s.getPerPage(), s.getSearch(), s.getExclude(), s.getInclude(), s.getOffset(), s.getOrder(), s.getOrderBy(), s.getSlug(),
+                             s.getRoles());
+        // @formatter:on
+    }
+
+    @Override
+    protected Class<UsersSPI> getSpiType() {
+        return UsersSPI.class;
+    }
+
+    @Override
+    protected User doCreate(User object) {
+        return getSpi().create(getApiVersion(), object);
+    }
+
+    @Override
+    protected DeletedModel<User> doForceDelete(Integer id) {
+        return getSpi().delete(getApiVersion(), id, true, 1);
+    }
+
+    @Override
+    protected User doDelete(Integer id) {
+        return this.forceDelete(id).getPrevious();
+    }
+
+    @Override
+    protected User doUpdate(Integer id, User object) {
+        return getSpi().update(getApiVersion(), id, object);
+    }
+
+    @Override
+    protected User doRetrieve(Integer entityID, Context context) {
+        return getSpi().retrieve(getApiVersion(), entityID, context);
+    }
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressSevicePostRevisionAdapter.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressSevicePostRevisionAdapter.java
new file mode 100644
index 0000000..20aecaa
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/impl/WordpressSevicePostRevisionAdapter.java
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.PostRevision;
+import org.apache.camel.component.wordpress.api.service.WordpressServicePostRevision;
+import org.apache.camel.component.wordpress.api.service.spi.PostRevisionsSPI;
+import static com.google.common.base.Preconditions.checkArgument;
+
+public class WordpressSevicePostRevisionAdapter extends AbstractWordpressServiceAdapter<PostRevisionsSPI> implements WordpressServicePostRevision {
+
+    public WordpressSevicePostRevisionAdapter(final String wordpressUrl, final String apiVersion) {
+        super(wordpressUrl, apiVersion);
+    }
+
+    @Override
+    protected Class<PostRevisionsSPI> getSpiType() {
+        return PostRevisionsSPI.class;
+    }
+
+    @Override
+    public void delete(Integer postId, Integer revisionId) {
+        checkArgument(postId > 0, "Please define a post id");
+        checkArgument(revisionId > 0, "Please define a revision id");
+        this.getSpi().delete(this.getApiVersion(), postId, revisionId);
+    }
+
+    @Override
+    public PostRevision retrieve(Integer postId, Integer revisionId, Context context) {
+        checkArgument(postId > 0, "Please define a post id");
+        checkArgument(revisionId > 0, "Please define a revision id");
+        return this.getSpi().retrieveRevision(this.getApiVersion(), postId, revisionId, context);
+    }
+
+    @Override
+    public List<PostRevision> list(Integer postId, Context context) {
+        checkArgument(postId > 0, "Please define a post id");
+        return this.getSpi().list(this.getApiVersion(), postId, context);
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/CategoriesSPI.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/CategoriesSPI.java
new file mode 100644
index 0000000..a24cec8
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/CategoriesSPI.java
@@ -0,0 +1,73 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.spi;
+
+import java.util.List;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import org.apache.camel.component.wordpress.api.model.Category;
+import org.apache.camel.component.wordpress.api.model.CategoryOrderBy;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.Order;
+
+/**
+ * Describes the Categories Wordpress API
+ * 
+ * @see <a href= "https://developer.wordpress.org/rest-api/reference/categories/">Categories API Reference</a>
+ * @since 0.0.1
+ */
+@Path("/wp")
+public interface CategoriesSPI {
+
+    // @formatter:off
+    @GET
+    @Path("/v{apiVersion}/categories")
+    @Produces(MediaType.APPLICATION_JSON)
+    List<Category> list(@PathParam("apiVersion") String apiVersion, @QueryParam("context") Context context, @QueryParam("page") Integer page, @QueryParam("per_page") Integer perPage,
+                        @QueryParam("search") String search, @QueryParam("exclude") List<Integer> exclude, @QueryParam("include") List<Integer> include, @QueryParam("order") Order order,
+                        @QueryParam("orderby") CategoryOrderBy orderBy, @QueryParam("hide_empty") Boolean hideEmpty, @QueryParam("parent") Integer parent, @QueryParam("post") Integer post,
+                        @QueryParam("slug") String slug);
+
+    @GET
+    @Path("/v{apiVersion}/categories/{id}")
+    @Produces(MediaType.APPLICATION_JSON)
+    Category retrieve(@PathParam("apiVersion") String apiVersion, @PathParam("id") int categoryId, @QueryParam("context") Context context);
+
+    @POST
+    @Path("/v{apiVersion}/categories/")
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    Category create(@PathParam("apiVersion") String apiVersion, Category category);
+
+    @POST
+    @Path("/v{apiVersion}/categories/{id}")
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    Category update(@PathParam("apiVersion") String apiVersion, @PathParam("id") int categoryId, Category category);
+
+    @DELETE
+    @Path("/v{apiVersion}/categories/{id}")
+    Category delete(@PathParam("apiVersion") String apiVersion, @PathParam("id") int categoryId, @QueryParam("force") boolean force);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/CommentsSPI.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/CommentsSPI.java
new file mode 100644
index 0000000..955c3b4
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/CommentsSPI.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.spi;
+
+import java.util.Date;
+import java.util.List;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import org.apache.camel.component.wordpress.api.model.Comment;
+import org.apache.camel.component.wordpress.api.model.CommentOrderBy;
+import org.apache.camel.component.wordpress.api.model.CommentStatus;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.Order;
+
+/**
+ * Describes the Wordpress Comments API.
+ * 
+ * @see <a href= "https://developer.wordpress.org/rest-api/reference/comments/">Comments API Reference</a>
+ * @since 0.0.1
+ */
+@Path("/wp")
+public interface CommentsSPI {
+
+    // @formatter:off
+    @GET
+    @Path("/v{apiVersion}/comments")
+    @Produces(MediaType.APPLICATION_JSON)
+    List<Comment> list(@PathParam("apiVersion") String apiVersion, @QueryParam("context") Context context, @QueryParam("page") Integer page, @QueryParam("per_page") Integer perPage,
+                       @QueryParam("search") String search, @QueryParam("after") Date after, @QueryParam("author") List<Integer> author, @QueryParam("author_exclude") List<Integer> authorExclude,
+                       @QueryParam("author_email") String authorEmail, @QueryParam("before") Date before, @QueryParam("exclude") List<Integer> exclude, @QueryParam("include") List<Integer> include,
+                       @QueryParam("karma") Integer karma, @QueryParam("offset") List<Integer> offset, @QueryParam("order") Order order, @QueryParam("orderby") CommentOrderBy orderBy,
+                       @QueryParam("parent") List<Integer> parent, @QueryParam("parent_exclude") List<Integer> parentExclude, @QueryParam("post") List<Integer> post,
+                       @QueryParam("status") CommentStatus status, @QueryParam("type") String type);
+
+    @GET
+    @Path("/v{apiVersion}/comments/{id}")
+    @Produces(MediaType.APPLICATION_JSON)
+    Comment retrieve(@PathParam("apiVersion") String apiVersion, @PathParam("id") Integer id, @QueryParam("context") Context context);
+
+    // @formatter:on
+    @POST
+    @Path("/v{apiVersion}/comments")
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    Comment create(@PathParam("apiVersion") String apiVersion, Comment comment);
+
+    // @formatter:off
+    @POST
+    @Path("/v{apiVersion}/comments/{id}")
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    Comment update(@PathParam("apiVersion") String apiVersion, @PathParam("id") int id, Comment post);
+
+    @DELETE
+    @Path("/v{apiVersion}/comments/{id}")
+    Comment delete(@PathParam("apiVersion") String apiVersion, @PathParam("id") int id, @QueryParam("force") boolean force);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PagesSPI.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PagesSPI.java
new file mode 100644
index 0000000..46e4822
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PagesSPI.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.spi;
+
+import java.util.Date;
+import java.util.List;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.Order;
+import org.apache.camel.component.wordpress.api.model.Page;
+import org.apache.camel.component.wordpress.api.model.PageOrderBy;
+import org.apache.camel.component.wordpress.api.model.PublishableStatus;
+
+/**
+ * Describes the Wordpress Pages API.
+ * 
+ * @see <a href= "https://developer.wordpress.org/rest-api/reference/pages/">Pages API Reference</a>
+ * @since 0.0.1
+ */
+@Path("/wp")
+public interface PagesSPI {
+
+    // @formatter:off
+    @GET
+    @Path("/v{apiVersion}/pages")
+    @Produces(MediaType.APPLICATION_JSON)
+    List<Page> list(@PathParam("apiVersion") String apiVersion, @QueryParam("context") Context context, @QueryParam("page") Integer page, @QueryParam("per_page") Integer perPage,
+                    @QueryParam("search") String search, @QueryParam("after") Date after, @QueryParam("author") List<Integer> author, @QueryParam("author_exclude") List<Integer> authorExclude,
+                    @QueryParam("before") Date before, @QueryParam("exclude") List<Integer> exclude, @QueryParam("include") List<Integer> include, @QueryParam("menu_order") Integer menuOrder,
+                    @QueryParam("offset") List<Integer> offset, @QueryParam("order") Order order, @QueryParam("orderby") PageOrderBy orderBy, @QueryParam("parent") Integer parent,
+                    @QueryParam("parent_exclude") Integer parentExclude, @QueryParam("slug") List<String> slug, @QueryParam("status") PublishableStatus status, @QueryParam("filter") String filter);
+
+    // @formatter:off
+    @GET
+    @Path("/v{apiVersion}/pages/{pageId}")
+    @Produces(MediaType.APPLICATION_JSON)
+    Page retrieve(@PathParam("apiVersion") String apiVersion, @PathParam("pageId") int pageId, @QueryParam("context") Context context, @QueryParam("password") String password);
+
+    // @formatter:on
+    @POST
+    @Path("/v{apiVersion}/pages")
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    Page create(@PathParam("apiVersion") String apiVersion, Page page);
+
+    // @formatter:off
+    @POST
+    @Path("/v{apiVersion}/pages/{pageId}")
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    Page update(@PathParam("apiVersion") String apiVersion, @PathParam("pageId") int pageId, Page page);
+
+    @DELETE
+    @Path("/v{apiVersion}/pages/{pageId}")
+    Page delete(@PathParam("apiVersion") String apiVersion, @PathParam("pageId") int pageId, @QueryParam("force") boolean force);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PostRevisionsSPI.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PostRevisionsSPI.java
new file mode 100644
index 0000000..181c03a
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PostRevisionsSPI.java
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.spi;
+
+import java.util.List;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.PostRevision;
+
+/**
+ * Describes the Wordpress Posts Revision API.
+ * 
+ * @see <a href= "https://developer.wordpress.org/rest-api/reference/post-revisions/">Post Revisions API Reference</a>
+ * @since 0.0.1
+ */
+@Path("/wp")
+public interface PostRevisionsSPI {
+
+    // @formatter:off
+    @GET
+    @Path("/v{apiVersion}/posts/{postId}/revisions")
+    @Produces(MediaType.APPLICATION_JSON)
+    List<PostRevision> list(@PathParam("apiVersion") String apiVersion, @PathParam("postId") int postId, @QueryParam("context") Context context);
+
+    @GET
+    @Path("/v{apiVersion}/posts/{postId}/revisions/{id}")
+    @Produces(MediaType.APPLICATION_JSON)
+    PostRevision retrieveRevision(@PathParam("apiVersion") String apiVersion, @PathParam("postId") int postId, @PathParam("id") int revisionId, @QueryParam("context") Context context);
+
+    @DELETE
+    @Path("/v{apiVersion}/posts/{postId}/revisions/{id}")
+    @Produces(MediaType.APPLICATION_JSON)
+    void delete(@PathParam("apiVersion") String apiVersion, @PathParam("postId") int postId, @PathParam("id") int revisionId);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PostsSPI.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PostsSPI.java
new file mode 100644
index 0000000..b85b6f1
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/PostsSPI.java
@@ -0,0 +1,85 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.spi;
+
+import java.util.Date;
+import java.util.List;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.DeletedModel;
+import org.apache.camel.component.wordpress.api.model.Order;
+import org.apache.camel.component.wordpress.api.model.Post;
+import org.apache.camel.component.wordpress.api.model.PostOrderBy;
+import org.apache.camel.component.wordpress.api.model.PublishableStatus;
+
+/**
+ * Describes the Wordpress Posts API.
+ * 
+ * @see <a href= "https://developer.wordpress.org/rest-api/reference/posts/">Posts API Reference</a>
+ * @since 0.0.1
+ */
+@Path("/wp")
+public interface PostsSPI {
+
+    // @formatter:off
+    @GET
+    @Path("/v{apiVersion}/posts")
+    @Produces(MediaType.APPLICATION_JSON)
+    List<Post> list(@PathParam("apiVersion") String apiVersion, @QueryParam("context") Context context, @QueryParam("page") Integer page, @QueryParam("per_page") Integer perPage,
+                    @QueryParam("search") String search, @QueryParam("after") Date after, @QueryParam("author") List<Integer> author, @QueryParam("author_exclude") List<Integer> authorExclude,
+                    @QueryParam("before") Date before, @QueryParam("exclude") List<Integer> exclude, @QueryParam("include") List<Integer> include, @QueryParam("offset") List<Integer> offset,
+                    @QueryParam("order") Order order, @QueryParam("orderby") PostOrderBy orderBy, @QueryParam("slug") List<String> slug, @QueryParam("status") PublishableStatus status,
+                    @QueryParam("categories") List<String> categories, @QueryParam("categories_exclude") List<String> categoriesExclude, @QueryParam("tags") List<String> tags,
+                    @QueryParam("tags_exclude") List<String> tagsExclude, @QueryParam("stick") Boolean stick);
+
+    // @formatter:off
+    @GET
+    @Path("/v{apiVersion}/posts/{postId}")
+    @Produces(MediaType.APPLICATION_JSON)
+    Post retrieve(@PathParam("apiVersion") String apiVersion, @PathParam("postId") int postId, @QueryParam("context") Context context, @QueryParam("password") String password);
+
+    // @formatter:on
+    @POST
+    @Path("/v{apiVersion}/posts")
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    Post create(@PathParam("apiVersion") String apiVersion, Post post);
+
+    // @formatter:off
+    @POST
+    @Path("/v{apiVersion}/posts/{postId}")
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    Post update(@PathParam("apiVersion") String apiVersion, @PathParam("postId") int postId, Post post);
+
+    @DELETE
+    @Path("/v{apiVersion}/posts/{postId}")
+    Post delete(@PathParam("apiVersion") String apiVersion, @PathParam("postId") int postId);
+
+    @DELETE
+    @Path("/v{apiVersion}/posts/{postId}?force=true")
+    DeletedModel<Post> forceDelete(@PathParam("apiVersion") String apiVersion, @PathParam("postId") int postId);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/TagsSPI.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/TagsSPI.java
new file mode 100644
index 0000000..56ee71a
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/TagsSPI.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.spi;
+
+import java.util.List;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.Order;
+import org.apache.camel.component.wordpress.api.model.Tag;
+import org.apache.camel.component.wordpress.api.model.TagOrderBy;
+
+/**
+ * Describes the Tags Wordpress API
+ * 
+ * @see <a href= "https://developer.wordpress.org/rest-api/reference/tags/">Tags API Reference</a>
+ * @since 0.0.1
+ */
+@Path("/wp")
+public interface TagsSPI {
+
+    // @formatter:off
+    @GET
+    @Path("/v{apiVersion}/tags")
+    @Produces(MediaType.APPLICATION_JSON)
+    List<Tag> list(@PathParam("apiVersion") String apiVersion, @QueryParam("context") Context context, @QueryParam("page") Integer page, @QueryParam("per_page") Integer perPage,
+                   @QueryParam("search") String search, @QueryParam("exclude") List<Integer> exclude, @QueryParam("include") List<Integer> include, @QueryParam("offset") List<Integer> offset,
+                   @QueryParam("order") Order order, @QueryParam("orderby") TagOrderBy orderBy, @QueryParam("hide_empty") Boolean hideEmpty, @QueryParam("post") Integer post,
+                   @QueryParam("slug") String slug);
+
+    @GET
+    @Path("/v{apiVersion}/tags/{id}")
+    @Produces(MediaType.APPLICATION_JSON)
+    Tag retrieve(@PathParam("apiVersion") String apiVersion, @PathParam("id") Integer id, @QueryParam("context") Context context);
+
+    @POST
+    @Path("/v{apiVersion}/tags")
+    Tag create(@PathParam("apiVersion") String apiVersion, Tag tag);
+
+    @POST
+    @Path("/v{apiVersion}/tags/{id}")
+    Tag update(@PathParam("apiVersion") String apiVersion, @PathParam("id") Integer id, Tag tag);
+
+    @DELETE
+    @Path("/v{apiVersion}/tags/{id}")
+    Tag delete(@PathParam("apiVersion") String apiVersion, @PathParam("id") Integer id, @QueryParam("force") boolean force);
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/TaxonomySPI.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/TaxonomySPI.java
new file mode 100644
index 0000000..7352f91
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/TaxonomySPI.java
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.spi;
+
+import java.util.Map;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.Taxonomy;
+
+@Path("/wp")
+public interface TaxonomySPI {
+
+    // @formatter:off
+    @GET
+    @Path("/v{apiVersion}/taxonomies")
+    @Produces(MediaType.APPLICATION_JSON)
+    Map<String, Taxonomy> list(@PathParam("apiVersion") String apiVersion, @QueryParam("context") Context context, @QueryParam("type") String postType);
+
+    @GET
+    @Path("/v{apiVersion}/taxonomies/{taxonomy}")
+    @Produces(MediaType.APPLICATION_JSON)
+    Taxonomy retrieve(@PathParam("apiVersion") String apiVersion, @QueryParam("context") Context context, @PathParam("taxonomy") String taxonomy);
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/UsersSPI.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/UsersSPI.java
new file mode 100644
index 0000000..15b77dd
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/service/spi/UsersSPI.java
@@ -0,0 +1,73 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.spi;
+
+import java.util.List;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import org.apache.camel.component.wordpress.api.model.Context;
+import org.apache.camel.component.wordpress.api.model.DeletedModel;
+import org.apache.camel.component.wordpress.api.model.Order;
+import org.apache.camel.component.wordpress.api.model.User;
+import org.apache.camel.component.wordpress.api.model.UserOrderBy;
+
+/**
+ * Describes the Users Wordpress API
+ * 
+ * @see <a href= "https://developer.wordpress.org/rest-api/reference/users/">Users API Reference</a>
+ * @since 0.0.1
+ */
+@Path("/wp")
+public interface UsersSPI {
+
+    // @formatter:off
+    @GET
+    @Path("/v{apiVersion}/users")
+    @Produces(MediaType.APPLICATION_JSON)
+    List<User> list(@PathParam("apiVersion") String apiVersion, @QueryParam("context") Context context, @QueryParam("page") Integer page, @QueryParam("per_page") Integer perPage,
+                    @QueryParam("search") String search, @QueryParam("exclude") List<Integer> exclude, @QueryParam("include") List<Integer> include, @QueryParam("offset") List<Integer> offset,
+                    @QueryParam("order") Order order, @QueryParam("orderby") UserOrderBy orderBy, @QueryParam("slug") List<String> slug, @QueryParam("roles") List<String> roles);
+
+    @GET
+    @Path("/v{apiVersion}/users/{id}")
+    @Produces(MediaType.APPLICATION_JSON)
+    User retrieve(@PathParam("apiVersion") String apiVersion, @PathParam("id") Integer id, @QueryParam("context") Context context);
+
+    @POST
+    @Path("/v{apiVersion}/users")
+    User create(@PathParam("apiVersion") String apiVersion, User user);
+
+    @POST
+    @Path("/v{apiVersion}/users/{id}")
+    User update(@PathParam("apiVersion") String apiVersion, @PathParam("id") Integer id, User tag);
+
+    /**
+     * @param apiVersion
+     * @param id Unique identifier for the user.
+     * @param force Required to be true, as users do not support trashing.
+     * @param reassignId Reassign the deleted user's posts and links to this user ID.
+     */
+    @DELETE
+    @Path("/v{apiVersion}/users/{id}")
+    DeletedModel<User> delete(@PathParam("apiVersion") String apiVersion, @PathParam("id") Integer id, @QueryParam("force") boolean force, @QueryParam("reassign") Integer reassignId);
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/AbstractWordpressConsumer.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/AbstractWordpressConsumer.java
new file mode 100644
index 0000000..700904a
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/AbstractWordpressConsumer.java
@@ -0,0 +1,87 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.consumer;
+
+import java.util.concurrent.ScheduledExecutorService;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.component.wordpress.WordpressComponentConfiguration;
+import org.apache.camel.component.wordpress.WordpressEndpoint;
+import org.apache.camel.impl.ScheduledPollConsumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractWordpressConsumer extends ScheduledPollConsumer {
+
+    protected static final Logger LOG = LoggerFactory.getLogger(AbstractWordpressConsumer.class);
+
+    private WordpressComponentConfiguration configuration;
+
+    public AbstractWordpressConsumer(WordpressEndpoint endpoint, Processor processor) {
+        super(endpoint, processor);
+        this.configuration = endpoint.getConfig();
+        this.initConsumer();
+    }
+
+    public AbstractWordpressConsumer(WordpressEndpoint endpoint, Processor processor, ScheduledExecutorService scheduledExecutorService) {
+        super(endpoint, processor, scheduledExecutorService);
+        this.configuration = endpoint.getConfig();
+        this.initConsumer();
+    }
+
+    public WordpressComponentConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    @Override
+    public boolean isGreedy() {
+        return false;
+    }
+
+    private void initConsumer() {
+        this.configureService(configuration);
+    }
+
+    /**
+     * Should be implemented to configure the endpoint calls. Called during consumer initialization
+     * 
+     * @param configuration the endpoint configuration
+     */
+    protected void configureService(WordpressComponentConfiguration configuration) {
+
+    }
+
+    @Override
+    protected abstract int poll() throws Exception;
+
+    /**
+     * Message processor
+     * 
+     * @param result
+     */
+    protected final void process(final Object result) {
+        Exchange exchange = getEndpoint().createExchange();
+        try {
+            exchange.getIn().setBody(result);
+            getProcessor().process(exchange);
+        } catch (Exception e) {
+            if (exchange.getException() != null) {
+                getExceptionHandler().handleException("Error processing exchange", exchange, exchange.getException());
+            }
+        }
+    }
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/WordpressPostConsumer.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/WordpressPostConsumer.java
new file mode 100644
index 0000000..014ce5f
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/WordpressPostConsumer.java
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.consumer;
+
+import java.util.List;
+import java.util.concurrent.ScheduledExecutorService;
+import org.apache.camel.Processor;
+import org.apache.camel.component.wordpress.WordpressEndpoint;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.component.wordpress.api.model.Post;
+import org.apache.camel.component.wordpress.api.model.PostSearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServicePosts;
+
+/**
+ * Consumer for Posts. Adapter for {@link WordpressServicePosts} read only methods (list and retrieve).
+ */
+public class WordpressPostConsumer extends AbstractWordpressConsumer {
+
+    private WordpressServicePosts servicePosts;
+
+    public WordpressPostConsumer(WordpressEndpoint endpoint, Processor processor) {
+        super(endpoint, processor);
+        servicePosts = WordpressServiceProvider.getInstance().getService(WordpressServicePosts.class);
+    }
+
+    public WordpressPostConsumer(WordpressEndpoint endpoint, Processor processor, ScheduledExecutorService scheduledExecutorService) {
+        super(endpoint, processor, scheduledExecutorService);
+        servicePosts = WordpressServiceProvider.getInstance().getService(WordpressServicePosts.class);
+    }
+
+    @Override
+    protected int poll() throws Exception {
+        if (this.getConfiguration().getId() == null) {
+            return this.pollForPostList();
+        } else {
+            return this.pollForSingle();
+        }
+    }
+
+    private int pollForPostList() {
+        final List<Post> posts = this.servicePosts.list((PostSearchCriteria)getConfiguration().getSearchCriteria());
+        posts.stream().forEach(p -> this.process(p));
+        return posts.size();
+    }
+
+    private int pollForSingle() {
+        final Post post = this.servicePosts.retrieve(getConfiguration().getId());
+        if (post == null) {
+            return 0;
+        }
+        this.process(post);
+        return 1;
+    }
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/WordpressUserConsumer.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/WordpressUserConsumer.java
new file mode 100644
index 0000000..8e9e556
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/consumer/WordpressUserConsumer.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.consumer;
+
+import java.util.List;
+import java.util.concurrent.ScheduledExecutorService;
+import org.apache.camel.Processor;
+import org.apache.camel.component.wordpress.WordpressEndpoint;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.component.wordpress.api.model.User;
+import org.apache.camel.component.wordpress.api.model.UserSearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceUsers;
+
+public class WordpressUserConsumer extends AbstractWordpressConsumer {
+
+    private WordpressServiceUsers serviceUsers;
+
+    public WordpressUserConsumer(WordpressEndpoint endpoint, Processor processor) {
+        super(endpoint, processor);
+        serviceUsers = WordpressServiceProvider.getInstance().getService(WordpressServiceUsers.class);
+    }
+
+    public WordpressUserConsumer(WordpressEndpoint endpoint, Processor processor, ScheduledExecutorService scheduledExecutorService) {
+        super(endpoint, processor, scheduledExecutorService);
+        serviceUsers = WordpressServiceProvider.getInstance().getService(WordpressServiceUsers.class);
+    }
+
+    @Override
+    protected int poll() throws Exception {
+        if (getConfiguration().getId() == null) {
+            return this.pollForList();
+        } else {
+            return this.pollForSingle();
+        }
+    }
+
+    private int pollForSingle() {
+        final User user = this.serviceUsers.retrieve(getConfiguration().getId());
+        if (user == null) {
+            return 0;
+        }
+        this.process(user);
+        return 1;
+    }
+
+    private int pollForList() {
+        final List<User> users = this.serviceUsers.list((UserSearchCriteria)getConfiguration().getSearchCriteria());
+        users.stream().forEach(p -> this.process(p));
+        LOG.trace("returned users is {}", users);
+        return users.size();
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/AbstractWordpressProducer.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/AbstractWordpressProducer.java
new file mode 100644
index 0000000..70e73da
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/AbstractWordpressProducer.java
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.producer;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.wordpress.WordpressComponentConfiguration;
+import org.apache.camel.component.wordpress.WordpressEndpoint;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.impl.DefaultProducer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractWordpressProducer<T> extends DefaultProducer {
+
+    protected static final Logger LOG = LoggerFactory.getLogger(WordpressPostProducer.class);
+
+    private WordpressComponentConfiguration configuration;
+
+    public AbstractWordpressProducer(WordpressEndpoint endpoint) {
+        super(endpoint);
+        this.configuration = endpoint.getConfig();
+        if (!WordpressServiceProvider.getInstance().hasAuthentication()) {
+            LOG.warn("Wordpress Producer hasn't authentication. This may lead to errors during route execution. Wordpress writing operations need authentication.");
+        }
+    }
+
+    public WordpressComponentConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    @Override
+    public WordpressEndpoint getEndpoint() {
+        return (WordpressEndpoint)super.getEndpoint();
+    }
+
+    @Override
+    public final void process(Exchange exchange) throws Exception {
+        if (this.getConfiguration().getId() == null) {
+            exchange.getOut().setBody(this.processInsert(exchange));
+        } else {
+            if (this.getEndpoint().getOperationDetail() == null) {
+                exchange.getOut().setBody(this.processUpdate(exchange));
+            } else {
+                exchange.getOut().setBody(this.processDelete(exchange));
+            }
+        }
+    }
+
+    protected abstract T processInsert(Exchange exchange);
+
+    protected abstract T processUpdate(Exchange exchange);
+
+    protected abstract T processDelete(Exchange exchange);
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressPostProducer.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressPostProducer.java
new file mode 100644
index 0000000..32ea52f
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressPostProducer.java
@@ -0,0 +1,56 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.producer;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.wordpress.WordpressEndpoint;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.component.wordpress.api.model.Post;
+import org.apache.camel.component.wordpress.api.service.WordpressServicePosts;
+
+/**
+ * The Wordpress Post producer.
+ */
+public class WordpressPostProducer extends AbstractWordpressProducer<Post> {
+    private WordpressServicePosts servicePosts;
+
+    public WordpressPostProducer(WordpressEndpoint endpoint) {
+        super(endpoint);
+        this.servicePosts = WordpressServiceProvider.getInstance().getService(WordpressServicePosts.class);
+    }
+
+    protected Post processInsert(Exchange exchange) {
+        LOG.debug("Trying to create a new blog post with {}", exchange.getIn().getBody());
+        return servicePosts.create(exchange.getIn().getBody(Post.class));
+    }
+
+    protected Post processUpdate(Exchange exchange) {
+        LOG.debug("Trying to update the post {} with id {}", exchange.getIn().getBody(), this.getConfiguration().getId());
+        return servicePosts.update(this.getConfiguration().getId(), exchange.getIn().getBody(Post.class));
+    }
+
+    protected Post processDelete(Exchange exchange) {
+        LOG.debug("Trying to delete a post with id {}", this.getConfiguration().getId());
+
+        if (this.getConfiguration().isForce()) {
+            return servicePosts.forceDelete(this.getConfiguration().getId()).getPrevious();
+        } else {
+            return servicePosts.delete(this.getConfiguration().getId());
+        }
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressUserProducer.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressUserProducer.java
new file mode 100644
index 0000000..b6426ed
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressUserProducer.java
@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.producer;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.wordpress.WordpressEndpoint;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.component.wordpress.api.model.User;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceUsers;
+
+public class WordpressUserProducer extends AbstractWordpressProducer<User> {
+
+    private WordpressServiceUsers serviceUsers;
+
+    public WordpressUserProducer(WordpressEndpoint endpoint) {
+        super(endpoint);
+        this.serviceUsers = WordpressServiceProvider.getInstance().getService(WordpressServiceUsers.class);
+    }
+
+    protected User processDelete(Exchange exchange) {
+        LOG.debug("Trying to delete user {}", getConfiguration().getId());
+        return serviceUsers.delete(getConfiguration().getId());
+    }
+
+    protected User processUpdate(Exchange exchange) {
+        LOG.debug("Trying to update the post {} with id {}", exchange.getIn().getBody(), this.getConfiguration().getId());
+        return serviceUsers.update(getConfiguration().getId(), exchange.getIn().getBody(User.class));
+    }
+
+    protected User processInsert(Exchange exchange) {
+        LOG.debug("Trying to create a new user{}", exchange.getIn().getBody());
+        return serviceUsers.create(exchange.getIn().getBody(User.class));
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/proxy/WordpressOperationType.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/proxy/WordpressOperationType.java
new file mode 100644
index 0000000..1ae638a
--- /dev/null
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/proxy/WordpressOperationType.java
@@ -0,0 +1,40 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.proxy;
+
+import org.apache.camel.component.wordpress.api.model.PostSearchCriteria;
+import org.apache.camel.component.wordpress.api.model.SearchCriteria;
+import org.apache.camel.component.wordpress.api.model.UserSearchCriteria;
+
+/**
+ * List of supported operations.
+ */
+public enum WordpressOperationType {
+
+    post(PostSearchCriteria.class), user(UserSearchCriteria.class);
+
+    private final Class<? extends SearchCriteria> criteriaType;
+
+    WordpressOperationType(Class<? extends SearchCriteria> criteriaType) {
+        this.criteriaType = criteriaType;
+    }
+
+    public Class<? extends SearchCriteria> getCriteriaType() {
+        return criteriaType;
+    }
+
+}
diff --git a/components/camel-wordpress/src/main/resources/META-INF/LICENSE.txt b/components/camel-wordpress/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/components/camel-wordpress/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/components/camel-wordpress/src/main/resources/META-INF/NOTICE.txt b/components/camel-wordpress/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/components/camel-wordpress/src/main/resources/META-INF/NOTICE.txt
@@ -0,0 +1,11 @@
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Apache Camel distribution.                    ==
+   =========================================================================
+
+   This product includes software developed by
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Please read the different LICENSE files present in the licenses directory of
+   this distribution.
diff --git a/components/camel-wordpress/src/main/resources/META-INF/services/org/apache/camel/component/wordpress b/components/camel-wordpress/src/main/resources/META-INF/services/org/apache/camel/component/wordpress
new file mode 100644
index 0000000..afba632
--- /dev/null
+++ b/components/camel-wordpress/src/main/resources/META-INF/services/org/apache/camel/component/wordpress
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+class=org.apache.camel.component.wordpress.WordpressComponent
diff --git a/components/camel-wordpress/src/main/resources/log4j.properties b/components/camel-wordpress/src/main/resources/log4j.properties
new file mode 100644
index 0000000..759df99
--- /dev/null
+++ b/components/camel-wordpress/src/main/resources/log4j.properties
@@ -0,0 +1,32 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+#
+# The logging properties used
+#
+log4j.rootLogger=INFO, out
+
+# uncomment the following line to turn on Camel debugging
+#log4j.logger.org.apache.camel=DEBUG
+
+# CONSOLE appender not used by default
+log4j.appender.out=org.apache.log4j.ConsoleAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n
+#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
+log4j.throwableRenderer=org.apache.log4j.EnhancedThrowableRenderer
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressComponentTest.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressComponentTest.java
new file mode 100644
index 0000000..7ef58c5
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressComponentTest.java
@@ -0,0 +1,56 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.wordpress.api.model.PostOrderBy;
+import org.apache.camel.component.wordpress.api.model.PostSearchCriteria;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.Matchers.emptyCollectionOf;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+
+public class WordpressComponentTest {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(WordpressComponentTest.class);
+
+    @Test
+    public void testParseUriPropertiesCriteria() throws Exception {
+        final WordpressComponent component = new WordpressComponent(Mockito.mock(CamelContext.class));
+        final WordpressEndpoint endpoint = (WordpressEndpoint)component
+            .createEndpoint("wordpress:post?apiVersion=2&url=http://mysite.com/&criteria.search=test&criteria.page=1&criteria.perPage=10&criteria.orderBy=author&criteria.categories=camel,dozer,json");
+
+        assertThat(endpoint.getConfig().getSearchCriteria(), instanceOf(PostSearchCriteria.class));
+        assertNotNull(endpoint.getConfig().getSearchCriteria());
+        assertThat(endpoint.getConfig().getSearchCriteria().getPage(), is(1));
+        assertThat(endpoint.getConfig().getSearchCriteria().getPerPage(), is(10));
+        assertThat(endpoint.getConfig().getSearchCriteria().getSearch(), is("test"));
+        assertThat(((PostSearchCriteria)endpoint.getConfig().getSearchCriteria()).getOrderBy(), is(PostOrderBy.author));
+        assertThat(((PostSearchCriteria)endpoint.getConfig().getSearchCriteria()).getCategories(), notNullValue());
+        assertThat(((PostSearchCriteria)endpoint.getConfig().getSearchCriteria()).getCategories(), not(emptyCollectionOf(String.class)));
+
+        LOGGER.info("Categories are {}", ((PostSearchCriteria)endpoint.getConfig().getSearchCriteria()).getCategories());
+    }
+
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressComponentTestSupport.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressComponentTestSupport.java
new file mode 100644
index 0000000..4bde7cc
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressComponentTestSupport.java
@@ -0,0 +1,44 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress;
+
+import java.io.IOException;
+import org.apache.camel.component.wordpress.api.test.WordpressMockServerTestSupport;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+public class WordpressComponentTestSupport extends CamelTestSupport {
+
+    public WordpressComponentTestSupport() {
+
+    }
+
+    @BeforeClass
+    public static void beforeClass() throws IOException {
+        WordpressMockServerTestSupport.setUpMockServer();
+    }
+
+    @AfterClass
+    public static void afterClass() {
+        WordpressMockServerTestSupport.tearDownMockServer();
+    }
+
+    protected String getServerBaseUrl() {
+        return WordpressMockServerTestSupport.getServerBaseUrl();
+    }
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressPostOperationTest.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressPostOperationTest.java
new file mode 100644
index 0000000..fd9a135
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressPostOperationTest.java
@@ -0,0 +1,123 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.wordpress.api.WordpressConstants;
+import org.apache.camel.component.wordpress.api.model.Content;
+import org.apache.camel.component.wordpress.api.model.Post;
+import org.apache.camel.component.wordpress.api.model.PublishableStatus;
+import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+
+public class WordpressPostOperationTest extends WordpressComponentTestSupport {
+
+    public WordpressPostOperationTest() {
+
+    }
+
+    @Test
+    public void testPostSingleRequest() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:resultSingle");
+        mock.expectedMinimumMessageCount(1);
+        mock.expectedBodyReceived().body(Post.class);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testPostListRequest() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:resultList");
+        mock.expectedMinimumMessageCount(1);
+        mock.expectedBodyReceived().body(Post.class);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testInsertPost() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultInsert");
+        mock.expectedBodyReceived().body(Post.class);
+        mock.expectedMessageCount(1);
+
+        final Post request = new Post();
+        request.setAuthor(2);
+        request.setTitle(new Content("hello from postman 2"));
+
+        final Post response = (Post)template.requestBody("direct:insertPost", request);
+        assertThat(response.getId(), is(9));
+        assertThat(response.getStatus(), is(PublishableStatus.draft));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testUpdatePost() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultUpdate");
+        mock.expectedBodyReceived().body(Post.class);
+        mock.expectedMessageCount(1);
+
+        final Post request = new Post();
+        request.setAuthor(2);
+        request.setTitle(new Content("hello from postman 2 - update"));
+
+        final Post response = (Post)template.requestBody("direct:updatePost", request);
+        assertThat(response.getId(), is(9));
+        assertThat(response.getStatus(), is(PublishableStatus.draft));
+        assertThat(response.getTitle().getRaw(), is("hello from postman 2 - update"));
+        assertThat(response.getTitle().getRendered(), is("hello from postman 2 &#8211; update"));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testDeletePost() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultDelete");
+        mock.expectedBodyReceived().body(Post.class);
+        mock.expectedMessageCount(1);
+
+        final Post response = (Post)template.requestBody("direct:deletePost", "");
+        assertThat(response.getId(), is(9));
+        assertThat(response.getStatus(), is(PublishableStatus.trash));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() {
+                final WordpressComponentConfiguration configuration = new WordpressComponentConfiguration();
+                final WordpressComponent component = new WordpressComponent();
+                configuration.setApiVersion(WordpressConstants.API_VERSION);
+                configuration.setUrl(getServerBaseUrl());
+                component.setConfiguration(configuration);
+                getContext().addComponent("wordpress", component);
+
+                from("wordpress:post?criteria.perPage=10&criteria.orderBy=author&criteria.categories=camel,dozer,json").to("mock:resultList");
+
+                from("wordpress:post?id=114913").to("mock:resultSingle");
+
+                from("direct:deletePost").to("wordpress:post:delete?id=9&user=ben&password=password123").to("mock:resultDelete");
+                from("direct:insertPost").to("wordpress:post?user=ben&password=password123").to("mock:resultInsert");
+                from("direct:updatePost").to("wordpress:post?id=9&user=ben&password=password123").to("mock:resultUpdate");
+            }
+        };
+    }
+
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressTestConstants.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressTestConstants.java
new file mode 100644
index 0000000..9b714b0
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressTestConstants.java
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress;
+
+public final class WordpressTestConstants {
+
+    public static final String WORDPRESS_DEMO_URL = "http://demo.wp-api.org/wp-json/";
+    public static final String WORDPRESS4J_URL = "http://wordpress4j.org/it/wp-json/";
+
+    private WordpressTestConstants() {
+
+    }
+
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressUserOperationTest.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressUserOperationTest.java
new file mode 100644
index 0000000..e6a424f
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressUserOperationTest.java
@@ -0,0 +1,119 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.wordpress.api.model.User;
+import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+
+public class WordpressUserOperationTest extends WordpressComponentTestSupport {
+
+    public WordpressUserOperationTest() {
+
+    }
+
+    @Test
+    public void testUserSingleRequest() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:resultSingle");
+        mock.expectedMinimumMessageCount(1);
+        mock.expectedBodyReceived().body(User.class);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testUserListRequest() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:resultList");
+        mock.expectedMinimumMessageCount(1);
+        mock.expectedBodyReceived().body(User.class);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testInsertUser() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultInsert");
+        mock.expectedBodyReceived().body(User.class);
+        mock.expectedMessageCount(1);
+
+        final User request = new User();
+        request.setEmail("bill.denbrough@derry.com");
+        request.setUsername("bdenbrough");
+        request.setFirstName("Bill");
+        request.setLastName("Denbrough");
+        request.setNickname("Big Bill");
+
+        final User response = (User)template.requestBody("direct:insertUser", request);
+        assertThat(response.getId(), is(3));
+        assertThat(response.getSlug(), is("bdenbrough"));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testUpdateUser() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultUpdate");
+        mock.expectedBodyReceived().body(User.class);
+        mock.expectedMessageCount(1);
+
+        final User request = new User();
+        request.setEmail("admin@email.com");
+
+        final User response = (User)template.requestBody("direct:updateUser", request);
+        assertThat(response.getId(), is(1));
+        assertThat(response.getEmail(), is("admin@email.com"));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testDeleteUser() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultDelete");
+        mock.expectedBodyReceived().body(User.class);
+        mock.expectedMessageCount(1);
+
+        final User response = (User)template.requestBody("direct:deleteUser", "");
+        assertThat(response.getId(), is(4));
+        assertThat(response.getUsername(), is("bmarsh"));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() {
+                final WordpressComponentConfiguration configuration = new WordpressComponentConfiguration();
+                final WordpressComponent component = new WordpressComponent();
+                configuration.setUrl(getServerBaseUrl());
+                component.setConfiguration(configuration);
+                getContext().addComponent("wordpress", component);
+
+                from("wordpress:user?criteria.perPage=10&criteria.orderBy=name&criteria.roles=admin,editor").to("mock:resultList");
+
+                from("wordpress:user?id=114913").to("mock:resultSingle");
+
+                from("direct:deleteUser").to("wordpress:user:delete?id=9&user=ben&password=password123").to("mock:resultDelete");
+                from("direct:insertUser").to("wordpress:user?user=ben&password=password123").to("mock:resultInsert");
+                from("direct:updateUser").to("wordpress:user?id=9&user=ben&password=password123").to("mock:resultUpdate");
+            }
+        };
+    }
+
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/model/PublishableStatusTest.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/model/PublishableStatusTest.java
new file mode 100644
index 0000000..5e956a6
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/model/PublishableStatusTest.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.model;
+
+import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class PublishableStatusTest {
+
+    @Test
+    public void testFromString() {
+        final String input1 = "PRIVATE";
+        final String input2 = "private";
+
+        assertThat(PublishableStatus.fromString(input1), is(PublishableStatus.private_));
+        assertThat(PublishableStatus.fromString(input2), is(PublishableStatus.private_));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testFromStringEmpty() {
+        final String input3 = "";
+
+        assertThat(PublishableStatus.fromString(input3), is(PublishableStatus.private_));
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testFromStringNull() {
+        final String input4 = null;
+
+        assertThat(PublishableStatus.fromString(input4), is(PublishableStatus.private_));
+    }
+
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapterTest.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapterTest.java
new file mode 100644
index 0000000..9adfd6a
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapterTest.java
@@ -0,0 +1,72 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.api.model.Content;
+import org.apache.camel.component.wordpress.api.model.Format;
+import org.apache.camel.component.wordpress.api.model.Post;
+import org.apache.camel.component.wordpress.api.model.PostSearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServicePosts;
+import org.apache.camel.component.wordpress.api.test.WordpressMockServerTestSupport;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.Matchers.emptyCollectionOf;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.junit.Assert.assertThat;
+
+public class WordpressServicePostsAdapterTest extends WordpressMockServerTestSupport {
+
+    private static WordpressServicePosts servicePosts;
+
+    @BeforeClass
+    public static void before() {
+        servicePosts = serviceProvider.getService(WordpressServicePosts.class);
+    }
+
+    @Test
+    public void testRetrievePost() {
+        final Post post = servicePosts.retrieve(1);
+        assertThat(post, not(nullValue()));
+        assertThat(post.getId(), is(greaterThan(0)));
+    }
+
+    @Test
+    public void testCreatePost() {
+        final Post entity = new Post();
+        entity.setAuthor(2);
+        entity.setTitle(new Content("hello from postman 2"));
+        entity.setContent(new Content("hello world 2"));
+        entity.setFormat(Format.standard);
+        final Post post = servicePosts.create(entity);
+        assertThat(post, not(nullValue()));
+        assertThat(post.getId(), is(9));
+    }
+
+    @Test
+    public void testListPosts() {
+        final PostSearchCriteria criteria = new PostSearchCriteria();
+        criteria.setPage(1);
+        criteria.setPerPage(10);
+        final List<Post> posts = servicePosts.list(criteria);
+        assertThat(posts, is(not(emptyCollectionOf(Post.class))));
+        assertThat(posts.size(), is(10));
+    }
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceCategoriesAdapterIT.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceCategoriesAdapterIT.java
new file mode 100644
index 0000000..200f15a
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceCategoriesAdapterIT.java
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl.ignored;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.WordpressTestConstants;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.component.wordpress.api.model.Category;
+import org.apache.camel.component.wordpress.api.model.CategorySearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceCategories;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.Matchers.emptyCollectionOf;
+import static org.hamcrest.Matchers.isEmptyOrNullString;
+import static org.junit.Assert.assertThat;
+
+@Ignore("Not implemented yet")
+public class WordpressServiceCategoriesAdapterIT {
+
+    private static WordpressServiceCategories serviceCategories;
+
+    @BeforeClass
+    public static void before() {
+        final WordpressServiceProvider serviceProvider = WordpressServiceProvider.getInstance();
+        serviceProvider.init(WordpressTestConstants.WORDPRESS_DEMO_URL);
+        serviceCategories = serviceProvider.getService(WordpressServiceCategories.class);
+    }
+
+    @Test
+    public void testRetrieve() {
+        final Category cat = serviceCategories.retrieve(1, null);
+        assertThat(cat, not(nullValue()));
+        assertThat(cat.getId(), is(1));
+        assertThat(cat.getName(), not(isEmptyOrNullString()));
+    }
+
+    @Test
+    public void testList() {
+        final CategorySearchCriteria criteria = new CategorySearchCriteria();
+        criteria.setPage(1);
+        criteria.setPerPage(2);
+        final List<Category> revisions = serviceCategories.list(criteria);
+        assertThat(revisions, is(not(emptyCollectionOf(Category.class))));
+        assertThat(revisions.size(), is(2));
+    }
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceCommentsAdapterIT.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceCommentsAdapterIT.java
new file mode 100644
index 0000000..6a4dee6
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceCommentsAdapterIT.java
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl.ignored;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.WordpressTestConstants;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.component.wordpress.api.model.Category;
+import org.apache.camel.component.wordpress.api.model.CategorySearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceCategories;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.Matchers.emptyCollectionOf;
+import static org.hamcrest.Matchers.isEmptyOrNullString;
+import static org.junit.Assert.assertThat;
+
+@Ignore("Not implemented yet")
+public class WordpressServiceCommentsAdapterIT {
+
+    private static WordpressServiceCategories serviceCategories;
+
+    @BeforeClass
+    public static void before() {
+        final WordpressServiceProvider serviceProvider = WordpressServiceProvider.getInstance();
+        serviceProvider.init(WordpressTestConstants.WORDPRESS_DEMO_URL);
+        serviceCategories = serviceProvider.getService(WordpressServiceCategories.class);
+    }
+
+    @Test
+    public void testRetrieve() {
+        final Category cat = serviceCategories.retrieve(1, null);
+        assertThat(cat, not(nullValue()));
+        assertThat(cat.getId(), is(1));
+        assertThat(cat.getName(), not(isEmptyOrNullString()));
+    }
+
+    @Test
+    public void testList() {
+        final CategorySearchCriteria criteria = new CategorySearchCriteria();
+        criteria.setPage(1);
+        criteria.setPerPage(2);
+        final List<Category> revisions = serviceCategories.list(criteria);
+        assertThat(revisions, is(not(emptyCollectionOf(Category.class))));
+        assertThat(revisions.size(), is(2));
+    }
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServicePagesAdapterIT.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServicePagesAdapterIT.java
new file mode 100644
index 0000000..34ccb47
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServicePagesAdapterIT.java
@@ -0,0 +1,62 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl.ignored;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.WordpressTestConstants;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.component.wordpress.api.model.Page;
+import org.apache.camel.component.wordpress.api.model.PageSearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServicePages;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.Matchers.emptyCollectionOf;
+import static org.junit.Assert.assertThat;
+
+@Ignore("Not implemented yet")
+public class WordpressServicePagesAdapterIT {
+
+    private static WordpressServicePages servicePages;
+
+    @BeforeClass
+    public static void before() {
+        final WordpressServiceProvider serviceProvider = WordpressServiceProvider.getInstance();
+        serviceProvider.init(WordpressTestConstants.WORDPRESS_DEMO_URL);
+        servicePages = serviceProvider.getService(WordpressServicePages.class);
+    }
+
+    @Test
+    public void testRetrieve() {
+        final Page page = servicePages.retrieve(2, null, null);
+        assertThat(page, not(nullValue()));
+        assertThat(page.getId(), is(2));
+    }
+
+    @Test
+    public void testList() {
+        final PageSearchCriteria criteria = new PageSearchCriteria();
+        criteria.setPage(1);
+        criteria.setPerPage(5);
+        final List<Page> posts = servicePages.list(criteria);
+        assertThat(posts, is(not(emptyCollectionOf(Page.class))));
+        assertThat(posts.size(), is(5));
+    }
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServicePostRevisionAdapterIT.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServicePostRevisionAdapterIT.java
new file mode 100644
index 0000000..5d639dd
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServicePostRevisionAdapterIT.java
@@ -0,0 +1,73 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl.ignored;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.WordpressTestConstants;
+import org.apache.camel.component.wordpress.api.WordpressAPIConfiguration;
+import org.apache.camel.component.wordpress.api.WordpressConstants;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.component.wordpress.api.auth.WordpressAuthentication;
+import org.apache.camel.component.wordpress.api.auth.WordpressBasicAuthentication;
+import org.apache.camel.component.wordpress.api.model.PostRevision;
+import org.apache.camel.component.wordpress.api.service.WordpressServicePostRevision;
+import org.apache.camel.component.wordpress.api.test.WordpressMockServerTestSupport;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.Matchers.emptyCollectionOf;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.junit.Assert.assertThat;
+
+/*
+ * TODO fix authentication problem (when implementing global authentication) 
+ * javax.ws.rs.NotAuthorizedException: HTTP 401 Unauthorized
+ */
+@Ignore("Not implemented yet")
+public class WordpressServicePostRevisionAdapterIT extends WordpressMockServerTestSupport {
+
+    private static WordpressServicePostRevision servicePostRevision;
+
+    @BeforeClass
+    public static void before() {
+        final WordpressServiceProvider serviceProvider = WordpressServiceProvider.getInstance();
+        final WordpressAuthentication authentication = new WordpressBasicAuthentication("integration_test", "JD)e)Ox)z@HyDF*Dv4aWszm*");
+        final WordpressAPIConfiguration configuration = new WordpressAPIConfiguration(WordpressTestConstants.WORDPRESS4J_URL, WordpressConstants.API_VERSION);
+        configuration.setAuthentication(authentication);
+        serviceProvider.init(configuration);
+        servicePostRevision = serviceProvider.getService(WordpressServicePostRevision.class);
+    }
+
+    @Test
+    public void testRetrieve() {
+        final PostRevision revision = servicePostRevision.retrieve(1, 1, null);
+        assertThat(revision, not(nullValue()));
+        assertThat(revision.getId(), is(1));
+        assertThat(revision.getGuid(), notNullValue());
+    }
+
+    @Test
+    public void testList() {
+        final List<PostRevision> revisions = servicePostRevision.list(1, null);
+        assertThat(revisions, is(not(emptyCollectionOf(PostRevision.class))));
+        assertThat(revisions.size(), greaterThan(0));
+    }
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceTagsAdapterIT.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceTagsAdapterIT.java
new file mode 100644
index 0000000..a66aea6
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceTagsAdapterIT.java
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl.ignored;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.WordpressTestConstants;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.component.wordpress.api.model.Tag;
+import org.apache.camel.component.wordpress.api.model.TagSearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceTags;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.Matchers.emptyCollectionOf;
+import static org.hamcrest.Matchers.isEmptyOrNullString;
+import static org.junit.Assert.assertThat;
+
+@Ignore("Not implemented yet")
+public class WordpressServiceTagsAdapterIT {
+
+    private static WordpressServiceTags serviceTags;
+
+    @BeforeClass
+    public static void before() {
+        final WordpressServiceProvider serviceProvider = WordpressServiceProvider.getInstance();
+        serviceProvider.init(WordpressTestConstants.WORDPRESS_DEMO_URL);
+        serviceTags = serviceProvider.getService(WordpressServiceTags.class);
+    }
+
+    @Test
+    public void testRetrieve() {
+        final Tag tag = serviceTags.retrieve(6, null);
+        assertThat(tag, not(nullValue()));
+        assertThat(tag.getId(), is(6));
+        assertThat(tag.getName(), not(isEmptyOrNullString()));
+    }
+
+    @Test
+    public void testList() {
+        final TagSearchCriteria criteria = new TagSearchCriteria();
+        criteria.setPage(1);
+        criteria.setPerPage(2);
+        final List<Tag> revisions = serviceTags.list(criteria);
+        assertThat(revisions, is(not(emptyCollectionOf(Tag.class))));
+        assertThat(revisions.size(), is(2));
+    }
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceTaxonomyAdapterIT.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceTaxonomyAdapterIT.java
new file mode 100644
index 0000000..8bf115b
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceTaxonomyAdapterIT.java
@@ -0,0 +1,58 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl.ignored;
+
+import java.util.Map;
+import org.apache.camel.component.wordpress.WordpressTestConstants;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.camel.component.wordpress.api.model.Taxonomy;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceTaxonomy;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.Matchers.isEmptyOrNullString;
+import static org.junit.Assert.assertThat;
+
+@Ignore("Not implemented yet")
+public class WordpressServiceTaxonomyAdapterIT {
+
+    private static WordpressServiceTaxonomy serviceTaxonomy;
+
+    @BeforeClass
+    public static void before() {
+        final WordpressServiceProvider serviceProvider = WordpressServiceProvider.getInstance();
+        serviceProvider.init(WordpressTestConstants.WORDPRESS_DEMO_URL);
+        serviceTaxonomy = serviceProvider.getService(WordpressServiceTaxonomy.class);
+    }
+
+    @Test
+    public void testRetrieve() {
+        final Taxonomy taxonomy = serviceTaxonomy.retrieve(null, "category");
+        assertThat(taxonomy, not(nullValue()));
+        assertThat(taxonomy.getName(), not(isEmptyOrNullString()));
+    }
+
+    @Test
+    public void testList() {
+        final Map<String, Taxonomy> taxs = serviceTaxonomy.list(null, null);
+        assertThat(taxs, is(not(nullValue())));
+        assertThat(taxs.size(), is(2));
+    }
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceUsersAdapterTest.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceUsersAdapterTest.java
new file mode 100644
index 0000000..c4ba5a5
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/ignored/WordpressServiceUsersAdapterTest.java
@@ -0,0 +1,71 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.service.impl.ignored;
+
+import java.util.List;
+import org.apache.camel.component.wordpress.api.model.User;
+import org.apache.camel.component.wordpress.api.model.UserSearchCriteria;
+import org.apache.camel.component.wordpress.api.service.WordpressServiceUsers;
+import org.apache.camel.component.wordpress.api.test.WordpressMockServerTestSupport;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.Matchers.emptyCollectionOf;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.junit.Assert.assertThat;
+
+public class WordpressServiceUsersAdapterTest extends WordpressMockServerTestSupport {
+
+    private static WordpressServiceUsers serviceUsers;
+
+    @BeforeClass
+    public static void before() {
+        serviceUsers = serviceProvider.getService(WordpressServiceUsers.class);
+    }
+
+    @Test
+    public void testRetrieveUser() {
+        final User user = serviceUsers.retrieve(1);
+        assertThat(user, not(nullValue()));
+        assertThat(user.getId(), is(greaterThan(0)));
+    }
+
+    @Test
+    public void testCreateUser() {
+        final User entity = new User();
+        entity.setEmail("bill.denbrough@derry.com");
+        entity.setFirstName("Bill");
+        entity.setLastName("Denbrough");
+        entity.setNickname("Big Bill");
+        entity.setUsername("bdenbrough");
+        final User user = serviceUsers.create(entity);
+        assertThat(user, not(nullValue()));
+        assertThat(user.getId(), is(3));
+    }
+
+    @Test
+    public void testListUsers() {
+        final UserSearchCriteria criteria = new UserSearchCriteria();
+        criteria.setPage(1);
+        criteria.setPerPage(10);
+        final List<User> users = serviceUsers.list(criteria);
+        assertThat(users, is(not(emptyCollectionOf(User.class))));
+        assertThat(users.size(), is(3));
+    }
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressMockServerTestSupport.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressMockServerTestSupport.java
new file mode 100644
index 0000000..31a64f4
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressMockServerTestSupport.java
@@ -0,0 +1,106 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.test;
+
+import java.io.IOException;
+import java.net.BindException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
+import org.apache.http.impl.bootstrap.HttpServer;
+import org.apache.http.impl.bootstrap.ServerBootstrap;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class WordpressMockServerTestSupport {
+
+    protected static HttpServer localServer;
+    protected static WordpressServiceProvider serviceProvider;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(WordpressMockServerTestSupport.class);
+    private static final int PORT = 9009;
+
+    public WordpressMockServerTestSupport() {
+
+    }
+
+    @BeforeClass
+    public static void setUpMockServer() throws IOException {
+        // @formatter:off
+        int i = 0;
+        while (true) {
+            try {
+                localServer = createServer(PORT + i);
+                localServer.start();
+                break;
+            } catch (BindException ex) {
+                LOGGER.warn("Port {} already in use, trying next one", PORT + i);
+                i++;
+            }
+        }
+        serviceProvider = WordpressServiceProvider.getInstance();
+        serviceProvider.init(getServerBaseUrl());
+        // @formatter:on
+        LOGGER.info("Local server up and running on address {} and port {}", localServer.getInetAddress(), localServer.getLocalPort());
+
+    }
+
+    private static HttpServer createServer(int port) {
+        final Map<String, String> postsListCreateRequestHandlers = new HashMap<String, String>();
+        postsListCreateRequestHandlers.put("GET", "/data/posts/list.json");
+        postsListCreateRequestHandlers.put("POST", "/data/posts/create.json");
+
+        final Map<String, String> postsSingleUpdateRequestHandlers = new HashMap<String, String>();
+        postsSingleUpdateRequestHandlers.put("GET", "/data/posts/single.json");
+        postsSingleUpdateRequestHandlers.put("POST", "/data/posts/update.json");
+        postsSingleUpdateRequestHandlers.put("DELETE", "/data/posts/delete.json");
+
+        final Map<String, String> usersListCreateRequestHandlers = new HashMap<>();
+        usersListCreateRequestHandlers.put("GET", "/data/users/list.json");
+        usersListCreateRequestHandlers.put("POST", "/data/users/create.json");
+
+        final Map<String, String> usersSingleUpdateRequestHandlers = new HashMap<String, String>();
+        usersSingleUpdateRequestHandlers.put("GET", "/data/users/single.json");
+        usersSingleUpdateRequestHandlers.put("POST", "/data/users/update.json");
+        usersSingleUpdateRequestHandlers.put("DELETE", "/data/users/delete.json");
+
+        // @formatter:off
+        return ServerBootstrap.bootstrap().setListenerPort(port).registerHandler("/wp/v2/posts", new WordpressServerHttpRequestHandler(postsListCreateRequestHandlers))
+            .registerHandler("/wp/v2/posts/*", new WordpressServerHttpRequestHandler(postsSingleUpdateRequestHandlers))
+            .registerHandler("/wp/v2/users", new WordpressServerHttpRequestHandler(usersListCreateRequestHandlers))
+            .registerHandler("/wp/v2/users/*", new WordpressServerHttpRequestHandler(usersSingleUpdateRequestHandlers)).create();
+        // @formatter:on
+    }
+
+    @AfterClass
+    public static void tearDownMockServer() {
+        LOGGER.info("Stopping local server");
+        if (localServer != null) {
+            localServer.stop();
+        }
+    }
+
+    public static WordpressServiceProvider getServiceProvider() {
+        return serviceProvider;
+    }
+
+    public static String getServerBaseUrl() {
+        return "http://" + localServer.getInetAddress().getHostName() + ":" + localServer.getLocalPort();
+    }
+}
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressServerHttpRequestHandler.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressServerHttpRequestHandler.java
new file mode 100644
index 0000000..4d5482b
--- /dev/null
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressServerHttpRequestHandler.java
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.api.test;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+import org.apache.cxf.helpers.IOUtils;
+import org.apache.http.HttpException;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.HttpRequestWrapper;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.protocol.HttpContext;
+import org.apache.http.protocol.HttpRequestHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class WordpressServerHttpRequestHandler implements HttpRequestHandler {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(WordpressServerHttpRequestHandler.class);
+
+    private final Map<String, String> mockResourceJsonResponse;
+
+    public WordpressServerHttpRequestHandler(String mockResourceJsonResponse) {
+        this.mockResourceJsonResponse = Collections.singletonMap("GET", mockResourceJsonResponse);
+    }
+
+    public WordpressServerHttpRequestHandler(Map<String, String> mockResourceJsonResponse) {
+        this.mockResourceJsonResponse = mockResourceJsonResponse;
+    }
+
+    @Override
+    public void handle(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException, IOException {
+        LOGGER.debug("received request {}", request);
+        final HttpRequestWrapper requestWrapper = HttpRequestWrapper.wrap(request);
+        final String responseBody = IOUtils.toString(this.getClass().getResourceAsStream(mockResourceJsonResponse.get(requestWrapper.getMethod())));
+        if (responseBody == null) {
+            LOGGER.warn("Resource not found on {}. Response body null.", mockResourceJsonResponse);
+        }
+        response.setStatusCode(HttpStatus.SC_OK);
+        response.setEntity(new StringEntity(responseBody, ContentType.APPLICATION_JSON));
+    }
+
+}
diff --git a/components/camel-wordpress/src/test/resources/META-INF/cxf/org.apache.cxf.Logger b/components/camel-wordpress/src/test/resources/META-INF/cxf/org.apache.cxf.Logger
new file mode 100644
index 0000000..27dd788
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/META-INF/cxf/org.apache.cxf.Logger
@@ -0,0 +1 @@
+org.apache.cxf.common.logging.Slf4jLogger
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/data/posts/create.json b/components/camel-wordpress/src/test/resources/data/posts/create.json
new file mode 100644
index 0000000..9772277
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/posts/create.json
@@ -0,0 +1,100 @@
+{
+    "id": 9,
+    "date": "2018-01-12T17:17:13",
+    "date_gmt": "2018-01-12T19:17:13",
+    "guid": {
+        "rendered": "http://wordpress4j.org/it/?p=9",
+        "raw": "http://wordpress4j.org/it/?p=9"
+    },
+    "modified": "2018-01-12T17:17:13",
+    "modified_gmt": "2018-01-12T19:17:13",
+    "password": "",
+    "slug": "",
+    "status": "draft",
+    "type": "post",
+    "link": "http://wordpress4j.org/it/?p=9",
+    "title": {
+        "raw": "hello from postman 2",
+        "rendered": "hello from postman 2"
+    },
+    "content": {
+        "raw": "hello world 2",
+        "rendered": "<p>hello world 2</p>\n",
+        "protected": false
+    },
+    "excerpt": {
+        "raw": "",
+        "rendered": "<p>hello world 2</p>\n",
+        "protected": false
+    },
+    "author": 2,
+    "featured_media": 0,
+    "comment_status": "open",
+    "ping_status": "open",
+    "sticky": false,
+    "template": "",
+    "format": "standard",
+    "meta": [],
+    "categories": [
+        1
+    ],
+    "tags": [],
+    "_links": {
+        "self": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/posts/9"
+            }
+        ],
+        "collection": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/posts"
+            }
+        ],
+        "about": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/types/post"
+            }
+        ],
+        "author": [
+            {
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/users/2"
+            }
+        ],
+        "replies": [
+            {
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/comments?post=9"
+            }
+        ],
+        "version-history": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/posts/9/revisions"
+            }
+        ],
+        "wp:attachment": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/media?parent=9"
+            }
+        ],
+        "wp:term": [
+            {
+                "taxonomy": "category",
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/categories?post=9"
+            },
+            {
+                "taxonomy": "post_tag",
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/tags?post=9"
+            }
+        ],
+        "curies": [
+            {
+                "name": "wp",
+                "href": "https://api.w.org/{rel}",
+                "templated": true
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/data/posts/delete.json b/components/camel-wordpress/src/test/resources/data/posts/delete.json
new file mode 100644
index 0000000..1e1d52b
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/posts/delete.json
@@ -0,0 +1,100 @@
+{
+    "id": 9,
+    "date": "2018-01-19T19:06:09",
+    "date_gmt": "2018-01-19T21:06:09",
+    "guid": {
+        "rendered": "http://wordpress4j.org/it/?p=9",
+        "raw": "http://wordpress4j.org/it/?p=9"
+    },
+    "modified": "2018-01-19T19:06:10",
+    "modified_gmt": "2018-01-19T21:06:10",
+    "password": "",
+    "slug": "__trashed",
+    "status": "trash",
+    "type": "post",
+    "link": "http://wordpress4j.org/it/__trashed/",
+    "title": {
+        "raw": "hello from postman 2 - update",
+        "rendered": "hello from postman 2 &#8211; update"
+    },
+    "content": {
+        "raw": "hello world",
+        "rendered": "<p>hello world</p>\n",
+        "protected": false
+    },
+    "excerpt": {
+        "raw": "",
+        "rendered": "<p>hello world</p>\n",
+        "protected": false
+    },
+    "author": 2,
+    "featured_media": 0,
+    "comment_status": "open",
+    "ping_status": "open",
+    "sticky": false,
+    "template": "",
+    "format": "standard",
+    "meta": [],
+    "categories": [
+        1
+    ],
+    "tags": [],
+    "_links": {
+        "self": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/posts/9"
+            }
+        ],
+        "collection": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/posts"
+            }
+        ],
+        "about": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/types/post"
+            }
+        ],
+        "author": [
+            {
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/users/2"
+            }
+        ],
+        "replies": [
+            {
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/comments?post=9"
+            }
+        ],
+        "version-history": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/posts/9/revisions"
+            }
+        ],
+        "wp:attachment": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/media?parent=9"
+            }
+        ],
+        "wp:term": [
+            {
+                "taxonomy": "category",
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/categories?post=9"
+            },
+            {
+                "taxonomy": "post_tag",
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/tags?post=9"
+            }
+        ],
+        "curies": [
+            {
+                "name": "wp",
+                "href": "https://api.w.org/{rel}",
+                "templated": true
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/data/posts/forcedelete.json b/components/camel-wordpress/src/test/resources/data/posts/forcedelete.json
new file mode 100644
index 0000000..e18a7e5
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/posts/forcedelete.json
@@ -0,0 +1,45 @@
+{
+    "deleted": true,
+    "previous": {
+        "id": 9,
+        "date": "2018-01-19T19:06:09",
+        "date_gmt": "2018-01-19T21:06:09",
+        "guid": {
+            "rendered": "http://wordpress4j.org/it/?p=9",
+            "raw": "http://wordpress4j.org/it/?p=9"
+        },
+        "modified": "2018-01-19T19:06:10",
+        "modified_gmt": "2018-01-19T21:06:10",
+        "password": "",
+        "slug": "__trashed",
+        "status": "trash",
+        "type": "post",
+        "link": "http://wordpress4j.org/it/__trashed/",
+        "title": {
+            "raw": "hello from postman 2 - update",
+            "rendered": "hello from postman 2 &#8211; update"
+        },
+        "content": {
+            "raw": "hello world",
+            "rendered": "<p>hello world</p>\n",
+            "protected": false
+        },
+        "excerpt": {
+            "raw": "",
+            "rendered": "<p>hello world</p>\n",
+            "protected": false
+        },
+        "author": 2,
+        "featured_media": 0,
+        "comment_status": "open",
+        "ping_status": "open",
+        "sticky": false,
+        "template": "",
+        "format": "standard",
+        "meta": [],
+        "categories": [
+            1
+        ],
+        "tags": []
+    }
+}
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/data/posts/list.json b/components/camel-wordpress/src/test/resources/data/posts/list.json
new file mode 100644
index 0000000..90903f9
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/posts/list.json
@@ -0,0 +1,1028 @@
+[
+    {
+        "id": 1,
+        "date": "2017-05-23T06:25:50",
+        "date_gmt": "2017-05-23T06:25:50",
+        "guid": {
+            "rendered": "http://demo.wp-api.org/?p=1"
+        },
+        "modified": "2017-05-23T06:25:50",
+        "modified_gmt": "2017-05-23T06:25:50",
+        "slug": "hello-world",
+        "status": "publish",
+        "type": "post",
+        "link": "https://demo.wp-api.org/2017/05/23/hello-world/",
+        "title": {
+            "rendered": "Hello world!"
+        },
+        "content": {
+            "rendered": "<p>Welcome to <a href=\"http://wp-api.org/\">WP API Demo Sites</a>. This is your first post. Edit or delete it, then start blogging!</p>\n",
+            "protected": false
+        },
+        "excerpt": {
+            "rendered": "<p>Welcome to WP API Demo Sites. This is your first post. Edit or delete it, then start blogging!</p>\n",
+            "protected": false
+        },
+        "author": 1,
+        "featured_media": 0,
+        "comment_status": "open",
+        "ping_status": "open",
+        "sticky": false,
+        "template": "",
+        "format": "standard",
+        "meta": [],
+        "categories": [
+            1
+        ],
+        "tags": [],
+        "_links": {
+            "self": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/1"
+                }
+            ],
+            "collection": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts"
+                }
+            ],
+            "about": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/types/post"
+                }
+            ],
+            "author": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1"
+                }
+            ],
+            "replies": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/comments?post=1"
+                }
+            ],
+            "version-history": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/1/revisions"
+                }
+            ],
+            "wp:attachment": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media?parent=1"
+                }
+            ],
+            "wp:term": [
+                {
+                    "taxonomy": "category",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/categories?post=1"
+                },
+                {
+                    "taxonomy": "post_tag",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/tags?post=1"
+                }
+            ],
+            "curies": [
+                {
+                    "name": "wp",
+                    "href": "https://api.w.org/{rel}",
+                    "templated": true
+                }
+            ]
+        }
+    },
+    {
+        "id": 35,
+        "date": "2017-05-22T18:36:23",
+        "date_gmt": "2017-05-22T18:36:23",
+        "guid": {
+            "rendered": "https://demo.wp-api.org/2017/05/22/quia-corrupti-quaerat-et-mollitia/"
+        },
+        "modified": "2017-05-22T18:36:23",
+        "modified_gmt": "2017-05-22T18:36:23",
+        "slug": "quia-corrupti-quaerat-et-mollitia",
+        "status": "publish",
+        "type": "post",
+        "link": "https://demo.wp-api.org/2017/05/22/quia-corrupti-quaerat-et-mollitia/",
+        "title": {
+            "rendered": "Quia corrupti quaerat et mollitia"
+        },
+        "content": {
+            "rendered": "<p><img alt=\"Praesentium ut.\" src=\"http://placehold.it/329x263/\"></p>\n<hr>\n<img alt=\"Cum atque.\" src=\"http://placehold.it/233x186/\"></p>\n<h1>Numquam harum velit modi nihil. Et eveniet fugit dolor et fugit. Velit eaque magnam quis nemo. Ipsum similique dolorum nihil sint</h1>\n<hr>\n<blockquote><p>Cum quia quam aut. Debitis <a title=\"Sit similique illo.\" href=\"http://www.Hills.net/explicabo-id-eligendi-quis\">hic nobis facere. Exercitationem necessit [...]
+            "protected": false
+        },
+        "excerpt": {
+            "rendered": "<p>Numquam harum velit modi nihil. Et eveniet fugit dolor et fugit. Velit eaque magnam quis nemo. Ipsum similique dolorum nihil sint Cum quia quam aut. Debitis hic nobis facere. Exercitationem necessitatibus soluta et. Est eaque maiores earum facere culpa. Sed qui fugiat autem Vero consectetur possimus doloribus nihil laboriosam Omnis omnis numquam ipsam sed. rerum &hellip; </p>\n<p class=\"link-more\"><a href=\"https://demo.wp-api.org/2017/05/22/quia-corrupti-qu [...]
+            "protected": false
+        },
+        "author": 1,
+        "featured_media": 34,
+        "comment_status": "open",
+        "ping_status": "closed",
+        "sticky": false,
+        "template": "",
+        "format": "standard",
+        "meta": [],
+        "categories": [
+            11
+        ],
+        "tags": [
+            3
+        ],
+        "_links": {
+            "self": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/35"
+                }
+            ],
+            "collection": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts"
+                }
+            ],
+            "about": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/types/post"
+                }
+            ],
+            "author": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1"
+                }
+            ],
+            "replies": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/comments?post=35"
+                }
+            ],
+            "version-history": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/35/revisions"
+                }
+            ],
+            "wp:featuredmedia": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media/34"
+                }
+            ],
+            "wp:attachment": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media?parent=35"
+                }
+            ],
+            "wp:term": [
+                {
+                    "taxonomy": "category",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/categories?post=35"
+                },
+                {
+                    "taxonomy": "post_tag",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/tags?post=35"
+                }
+            ],
+            "curies": [
+                {
+                    "name": "wp",
+                    "href": "https://api.w.org/{rel}",
+                    "templated": true
+                }
+            ]
+        }
+    },
+    {
+        "id": 15,
+        "date": "2017-05-22T18:35:30",
+        "date_gmt": "2017-05-22T18:35:30",
+        "guid": {
+            "rendered": "https://demo.wp-api.org/2017/05/22/sit-hic-deleniti-voluptatum-non-laborum/"
+        },
+        "modified": "2017-05-22T18:35:30",
+        "modified_gmt": "2017-05-22T18:35:30",
+        "slug": "sit-hic-deleniti-voluptatum-non-laborum",
+        "status": "publish",
+        "type": "post",
+        "link": "https://demo.wp-api.org/2017/05/22/sit-hic-deleniti-voluptatum-non-laborum/",
+        "title": {
+            "rendered": "Sit hic deleniti voluptatum non laborum"
+        },
+        "content": {
+            "rendered": "<ul>\n<li>Expedita excepturi rem doloribus dolor</li>\n<li>Earum sint aut non et</li>\n<li>Itaque</li>\n</ul>\n<ul>\n<li>Architecto eaque nostrum non aliquid et ad animi</li>\n<li>Et fugiat ipsam non</li>\n<li>Et cum praesentium omnis iure qui laborum</li>\n<li>Molestias non laudantium quia impedit</li>\n</ul>\n<h5>Qui ex necessitatibus ipsam doloribus nostrum eius. Non illum perferendis quo sed a</h5>\n<p>Velit fugiat expedita sit illo voluptate quidem. minus al [...]
+            "protected": false
+        },
+        "excerpt": {
+            "rendered": "<p>Expedita excepturi rem doloribus dolor Earum sint aut non et Itaque Architecto eaque nostrum non aliquid et ad animi Et fugiat ipsam non Et cum praesentium omnis iure qui laborum Molestias non laudantium quia impedit Qui ex necessitatibus ipsam doloribus nostrum eius. Non illum perferendis quo sed a Velit fugiat expedita sit illo voluptate quidem. &hellip; </p>\n<p class=\"link-more\"><a href=\"https://demo.wp-api.org/2017/05/22/sit-hic-deleniti-voluptatum-non [...]
+            "protected": false
+        },
+        "author": 1,
+        "featured_media": 14,
+        "comment_status": "open",
+        "ping_status": "open",
+        "sticky": false,
+        "template": "",
+        "format": "standard",
+        "meta": [],
+        "categories": [
+            11
+        ],
+        "tags": [
+            6
+        ],
+        "_links": {
+            "self": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/15"
+                }
+            ],
+            "collection": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts"
+                }
+            ],
+            "about": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/types/post"
+                }
+            ],
+            "author": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1"
+                }
+            ],
+            "replies": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/comments?post=15"
+                }
+            ],
+            "version-history": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/15/revisions"
+                }
+            ],
+            "wp:featuredmedia": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media/14"
+                }
+            ],
+            "wp:attachment": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media?parent=15"
+                }
+            ],
+            "wp:term": [
+                {
+                    "taxonomy": "category",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/categories?post=15"
+                },
+                {
+                    "taxonomy": "post_tag",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/tags?post=15"
+                }
+            ],
+            "curies": [
+                {
+                    "name": "wp",
+                    "href": "https://api.w.org/{rel}",
+                    "templated": true
+                }
+            ]
+        }
+    },
+    {
+        "id": 37,
+        "date": "2017-05-22T13:41:09",
+        "date_gmt": "2017-05-22T13:41:09",
+        "guid": {
+            "rendered": "https://demo.wp-api.org/2017/05/22/deserunt-unde-reprehenderit-qui/"
+        },
+        "modified": "2017-05-22T13:41:09",
+        "modified_gmt": "2017-05-22T13:41:09",
+        "slug": "deserunt-unde-reprehenderit-qui",
+        "status": "publish",
+        "type": "post",
+        "link": "https://demo.wp-api.org/2017/05/22/deserunt-unde-reprehenderit-qui/",
+        "title": {
+            "rendered": "Deserunt unde reprehenderit qui"
+        },
+        "content": {
+            "rendered": "<h4>Quasi quod et ut officia quisquam dolorum ipsa</h4>\n<p><img alt=\"Aut doloribus in ut temporibus.\" src=\"http://placehold.it/320x256/\"></p>\n<h5>Reprehenderit et architecto atque nostrum quaerat. Ut accusamus quaerat corporis dolorem dicta sed blanditiis. Dolores dignissimos quis impedit eaque ab ut quia</h5>\n<hr>\n<ul>\n<li>Ipsa sunt perferendis ut voluptatem quo</li>\n<li>Sit dolor autem ut eius itaque eius earum</li>\n<li>At qui</li>\n<li>Aut molestiae [...]
+            "protected": false
+        },
+        "excerpt": {
+            "rendered": "<p>Quasi quod et ut officia quisquam dolorum ipsa Reprehenderit et architecto atque nostrum quaerat. Ut accusamus quaerat corporis dolorem dicta sed blanditiis. Dolores dignissimos quis impedit eaque ab ut quia Ipsa sunt perferendis ut voluptatem quo Sit dolor autem ut eius itaque eius earum At qui Aut molestiae molestias mollitia Corrupti aspernatur Velit neque Autem &hellip; </p>\n<p class=\"link-more\"><a href=\"https://demo.wp-api.org/2017/05/22/deserunt-unde [...]
+            "protected": false
+        },
+        "author": 1,
+        "featured_media": 36,
+        "comment_status": "open",
+        "ping_status": "closed",
+        "sticky": false,
+        "template": "",
+        "format": "standard",
+        "meta": [],
+        "categories": [
+            11
+        ],
+        "tags": [
+            6,
+            4,
+            3
+        ],
+        "_links": {
+            "self": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/37"
+                }
+            ],
+            "collection": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts"
+                }
+            ],
+            "about": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/types/post"
+                }
+            ],
+            "author": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1"
+                }
+            ],
+            "replies": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/comments?post=37"
+                }
+            ],
+            "version-history": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/37/revisions"
+                }
+            ],
+            "wp:featuredmedia": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media/36"
+                }
+            ],
+            "wp:attachment": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media?parent=37"
+                }
+            ],
+            "wp:term": [
+                {
+                    "taxonomy": "category",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/categories?post=37"
+                },
+                {
+                    "taxonomy": "post_tag",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/tags?post=37"
+                }
+            ],
+            "curies": [
+                {
+                    "name": "wp",
+                    "href": "https://api.w.org/{rel}",
+                    "templated": true
+                }
+            ]
+        }
+    },
+    {
+        "id": 22,
+        "date": "2017-05-22T13:11:06",
+        "date_gmt": "2017-05-22T13:11:06",
+        "guid": {
+            "rendered": "https://demo.wp-api.org/2017/05/22/possimus-ut-tenetur-eum-qui/"
+        },
+        "modified": "2017-05-22T13:11:06",
+        "modified_gmt": "2017-05-22T13:11:06",
+        "slug": "possimus-ut-tenetur-eum-qui",
+        "status": "publish",
+        "type": "post",
+        "link": "https://demo.wp-api.org/2017/05/22/possimus-ut-tenetur-eum-qui/",
+        "title": {
+            "rendered": "Possimus ut tenetur eum qui"
+        },
+        "content": {
+            "rendered": "<h6>Nihil quis nulla maxime. Dolorem et inventore laudantium qui non vel enim. Hic iure debitis possimus</h6>\n<ol>\n<li>Voluptates et voluptatem et</li>\n<li>Quis quia</li>\n<li>Consequuntur odio rerum distinctio facere</li>\n<li>Quae maxime eius dolores enim</li>\n<li>Voluptate</li>\n<li>Et qui iste voluptatem</li>\n<li>Nam fugit ut nihil</li>\n<li>Non architecto vero qui</li>\n</ol>\n<h6>Ullam accusamus consectetur tenetur quasi. Voluptatem maiores labore porr [...]
+            "protected": false
+        },
+        "excerpt": {
+            "rendered": "<p>Nihil quis nulla maxime. Dolorem et inventore laudantium qui non vel enim. Hic iure debitis possimus Voluptates et voluptatem et Quis quia Consequuntur odio rerum distinctio facere Quae maxime eius dolores enim Voluptate Et qui iste voluptatem Nam fugit ut nihil Non architecto vero qui Ullam accusamus consectetur tenetur quasi. Voluptatem maiores labore porro doloribus &hellip; </p>\n<p class=\"link-more\"><a href=\"https://demo.wp-api.org/2017/05/22/possimus- [...]
+            "protected": false
+        },
+        "author": 1,
+        "featured_media": 20,
+        "comment_status": "open",
+        "ping_status": "open",
+        "sticky": false,
+        "template": "",
+        "format": "standard",
+        "meta": [],
+        "categories": [
+            11,
+            1
+        ],
+        "tags": [
+            6
+        ],
+        "_links": {
+            "self": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/22"
+                }
+            ],
+            "collection": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts"
+                }
+            ],
+            "about": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/types/post"
+                }
+            ],
+            "author": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1"
+                }
+            ],
+            "replies": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/comments?post=22"
+                }
+            ],
+            "version-history": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/22/revisions"
+                }
+            ],
+            "wp:featuredmedia": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media/20"
+                }
+            ],
+            "wp:attachment": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media?parent=22"
+                }
+            ],
+            "wp:term": [
+                {
+                    "taxonomy": "category",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/categories?post=22"
+                },
+                {
+                    "taxonomy": "post_tag",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/tags?post=22"
+                }
+            ],
+            "curies": [
+                {
+                    "name": "wp",
+                    "href": "https://api.w.org/{rel}",
+                    "templated": true
+                }
+            ]
+        }
+    },
+    {
+        "id": 38,
+        "date": "2017-05-22T10:20:48",
+        "date_gmt": "2017-05-22T10:20:48",
+        "guid": {
+            "rendered": "https://demo.wp-api.org/2017/05/22/odio-labore-qui-ipsam-omnis/"
+        },
+        "modified": "2017-05-22T10:20:48",
+        "modified_gmt": "2017-05-22T10:20:48",
+        "slug": "odio-labore-qui-ipsam-omnis",
+        "status": "publish",
+        "type": "post",
+        "link": "https://demo.wp-api.org/2017/05/22/odio-labore-qui-ipsam-omnis/",
+        "title": {
+            "rendered": "Odio labore qui ipsam omnis"
+        },
+        "content": {
+            "rendered": "<ol>\n<li>Dicta commodi odio enim beatae</li>\n<li>Dolor sequi et nesciunt</li>\n<li>Et sint eos consequatur fuga ratione laboriosam</li>\n<li>Tenetur unde omnis dolor aut omnis a</li>\n<li>Dignissimos at hic</li>\n</ol>\n<h3>Eligendi et ipsa molestiae neque aut nemo dolor</h3>\n<p><!--more--></p>\n<blockquote><p>Accusamus ab minima asperiores officiis aut. Molestiae molestias eum ex ex illum. quasi ipsam nam recusandae sunt totam. est temporibus sunt rem nihil s [...]
+            "protected": false
+        },
+        "excerpt": {
+            "rendered": "<p>Dicta commodi odio enim beatae Dolor sequi et nesciunt Et sint eos consequatur fuga ratione laboriosam Tenetur unde omnis dolor aut omnis a Dignissimos at hic Eligendi et ipsa molestiae neque aut nemo dolor</p>\n",
+            "protected": false
+        },
+        "author": 1,
+        "featured_media": 36,
+        "comment_status": "open",
+        "ping_status": "closed",
+        "sticky": false,
+        "template": "",
+        "format": "standard",
+        "meta": [],
+        "categories": [
+            2
+        ],
+        "tags": [
+            3
+        ],
+        "_links": {
+            "self": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/38"
+                }
+            ],
+            "collection": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts"
+                }
+            ],
+            "about": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/types/post"
+                }
+            ],
+            "author": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1"
+                }
+            ],
+            "replies": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/comments?post=38"
+                }
+            ],
+            "version-history": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/38/revisions"
+                }
+            ],
+            "wp:featuredmedia": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media/36"
+                }
+            ],
+            "wp:attachment": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media?parent=38"
+                }
+            ],
+            "wp:term": [
+                {
+                    "taxonomy": "category",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/categories?post=38"
+                },
+                {
+                    "taxonomy": "post_tag",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/tags?post=38"
+                }
+            ],
+            "curies": [
+                {
+                    "name": "wp",
+                    "href": "https://api.w.org/{rel}",
+                    "templated": true
+                }
+            ]
+        }
+    },
+    {
+        "id": 28,
+        "date": "2017-05-22T10:14:12",
+        "date_gmt": "2017-05-22T10:14:12",
+        "guid": {
+            "rendered": "https://demo.wp-api.org/2017/05/22/sit-ex-est-et-voluptatibus/"
+        },
+        "modified": "2017-05-22T10:14:12",
+        "modified_gmt": "2017-05-22T10:14:12",
+        "slug": "sit-ex-est-et-voluptatibus",
+        "status": "publish",
+        "type": "post",
+        "link": "https://demo.wp-api.org/2017/05/22/sit-ex-est-et-voluptatibus/",
+        "title": {
+            "rendered": "Sit ex est et voluptatibus"
+        },
+        "content": {
+            "rendered": "<h5>Amet alias voluptatem et tempore. Beatae tempore odio iusto nemo dolores et dolorem. Qui iure soluta ad laboriosam dignissimos dolorem</h5>\n<p>Et voluptate ullam aut optio numquam Voluptate placeat aut numquam. est error ut. Rerum error exercitationem rerum nobis et voluptatem In pariatur sit in nisi. Quaerat accusantium quis ullam dolore ex ullam. Vel earum et asperiores veritatis quia voluptas. voluptatem aut eos Assumenda tempora molestias maiores <a titl [...]
+            "protected": false
+        },
+        "excerpt": {
+            "rendered": "<p>Amet alias voluptatem et tempore. Beatae tempore odio iusto nemo dolores et dolorem. Qui iure soluta ad laboriosam dignissimos dolorem Et voluptate ullam aut optio numquam Voluptate placeat aut numquam. est error ut. Rerum error exercitationem rerum nobis et voluptatem In pariatur sit in nisi. Quaerat accusantium quis ullam dolore ex ullam. Vel earum et &hellip; </p>\n<p class=\"link-more\"><a href=\"https://demo.wp-api.org/2017/05/22/sit-ex-est-et-voluptatibu [...]
+            "protected": false
+        },
+        "author": 1,
+        "featured_media": 25,
+        "comment_status": "open",
+        "ping_status": "open",
+        "sticky": false,
+        "template": "",
+        "format": "standard",
+        "meta": [],
+        "categories": [
+            11
+        ],
+        "tags": [
+            4,
+            3
+        ],
+        "_links": {
+            "self": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/28"
+                }
+            ],
+            "collection": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts"
+                }
+            ],
+            "about": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/types/post"
+                }
+            ],
+            "author": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1"
+                }
+            ],
+            "replies": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/comments?post=28"
+                }
+            ],
+            "version-history": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/28/revisions"
+                }
+            ],
+            "wp:featuredmedia": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media/25"
+                }
+            ],
+            "wp:attachment": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media?parent=28"
+                }
+            ],
+            "wp:term": [
+                {
+                    "taxonomy": "category",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/categories?post=28"
+                },
+                {
+                    "taxonomy": "post_tag",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/tags?post=28"
+                }
+            ],
+            "curies": [
+                {
+                    "name": "wp",
+                    "href": "https://api.w.org/{rel}",
+                    "templated": true
+                }
+            ]
+        }
+    },
+    {
+        "id": 9,
+        "date": "2017-05-22T09:51:24",
+        "date_gmt": "2017-05-22T09:51:24",
+        "guid": {
+            "rendered": "https://demo.wp-api.org/2017/05/22/debitis-consequatur-dignissimos-quis-sunt-non-voluptatum/"
+        },
+        "modified": "2017-05-22T09:51:24",
+        "modified_gmt": "2017-05-22T09:51:24",
+        "slug": "debitis-consequatur-dignissimos-quis-sunt-non-voluptatum",
+        "status": "publish",
+        "type": "post",
+        "link": "https://demo.wp-api.org/2017/05/22/debitis-consequatur-dignissimos-quis-sunt-non-voluptatum/",
+        "title": {
+            "rendered": "Debitis consequatur dignissimos quis sunt non voluptatum"
+        },
+        "content": {
+            "rendered": "<h6>Dolores non iste veritatis eligendi consequatur tempora. Adipisci ipsa aliquid hic maxime commodi voluptatem</h6>\n<p>Molestiae veniam quo est omnis enim cupiditate ut. Tempore non fugiat maxime consequatur et dolorum a. Sapiente provident eaque officia quod esse. Non distinctio amet qui voluptas officia quam doloremque. Qui fugit sunt facilis optio quisquam. Sunt vel dignissimos sed qui. Voluptatibus odit dolore modi dolorum unde inventore. Dolores at rerum  [...]
+            "protected": false
+        },
+        "excerpt": {
+            "rendered": "<p>Dolores non iste veritatis eligendi consequatur tempora. Adipisci ipsa aliquid hic maxime commodi voluptatem Molestiae veniam quo est omnis enim cupiditate ut. Tempore non fugiat maxime consequatur et dolorum a. Sapiente provident eaque officia quod esse. Non distinctio amet qui voluptas officia quam doloremque. Qui fugit sunt facilis optio quisquam. Sunt vel dignissimos sed qui. &hellip; </p>\n<p class=\"link-more\"><a href=\"https://demo.wp-api.org/2017/05/2 [...]
+            "protected": false
+        },
+        "author": 1,
+        "featured_media": 8,
+        "comment_status": "open",
+        "ping_status": "open",
+        "sticky": false,
+        "template": "",
+        "format": "standard",
+        "meta": [],
+        "categories": [
+            11
+        ],
+        "tags": [
+            4,
+            3
+        ],
+        "_links": {
+            "self": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/9"
+                }
+            ],
+            "collection": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts"
+                }
+            ],
+            "about": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/types/post"
+                }
+            ],
+            "author": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1"
+                }
+            ],
+            "replies": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/comments?post=9"
+                }
+            ],
+            "version-history": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/9/revisions"
+                }
+            ],
+            "wp:featuredmedia": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media/8"
+                }
+            ],
+            "wp:attachment": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media?parent=9"
+                }
+            ],
+            "wp:term": [
+                {
+                    "taxonomy": "category",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/categories?post=9"
+                },
+                {
+                    "taxonomy": "post_tag",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/tags?post=9"
+                }
+            ],
+            "curies": [
+                {
+                    "name": "wp",
+                    "href": "https://api.w.org/{rel}",
+                    "templated": true
+                }
+            ]
+        }
+    },
+    {
+        "id": 11,
+        "date": "2017-05-22T08:37:40",
+        "date_gmt": "2017-05-22T08:37:40",
+        "guid": {
+            "rendered": "https://demo.wp-api.org/2017/05/22/ipsam-voluptate-nulla-consequatur-id-et/"
+        },
+        "modified": "2017-05-22T08:37:40",
+        "modified_gmt": "2017-05-22T08:37:40",
+        "slug": "ipsam-voluptate-nulla-consequatur-id-et",
+        "status": "publish",
+        "type": "post",
+        "link": "https://demo.wp-api.org/2017/05/22/ipsam-voluptate-nulla-consequatur-id-et/",
+        "title": {
+            "rendered": "Ipsam voluptate nulla consequatur id et"
+        },
+        "content": {
+            "rendered": "<ul>\n<li>Ipsa</li>\n<li>Culpa impedit est</li>\n<li>Unde nemo neque rerum ea</li>\n</ul>\n<p><img class=\"alignright\" alt=\"Necessitatibus.\" src=\"http://placehold.it/462x369/\"><br />\n<!--more--></p>\n<blockquote><p>Ipsa quo eligendi maiores omnis. Et maxime eum ea ut et. Unde itaque sit cupiditate quo. quo cupiditate tenetur numquam nihil reprehenderit praesentium. Sunt incidunt Laborum molestiae rem enim Molestiae dignissimos a. dolore culpa reprehenderit  [...]
+            "protected": false
+        },
+        "excerpt": {
+            "rendered": "<p>Ipsa Culpa impedit est Unde nemo neque rerum ea</p>\n",
+            "protected": false
+        },
+        "author": 1,
+        "featured_media": 10,
+        "comment_status": "open",
+        "ping_status": "closed",
+        "sticky": false,
+        "template": "",
+        "format": "standard",
+        "meta": [],
+        "categories": [
+            11
+        ],
+        "tags": [],
+        "_links": {
+            "self": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/11"
+                }
+            ],
+            "collection": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts"
+                }
+            ],
+            "about": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/types/post"
+                }
+            ],
+            "author": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1"
+                }
+            ],
+            "replies": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/comments?post=11"
+                }
+            ],
+            "version-history": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/11/revisions"
+                }
+            ],
+            "wp:featuredmedia": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media/10"
+                }
+            ],
+            "wp:attachment": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media?parent=11"
+                }
+            ],
+            "wp:term": [
+                {
+                    "taxonomy": "category",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/categories?post=11"
+                },
+                {
+                    "taxonomy": "post_tag",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/tags?post=11"
+                }
+            ],
+            "curies": [
+                {
+                    "name": "wp",
+                    "href": "https://api.w.org/{rel}",
+                    "templated": true
+                }
+            ]
+        }
+    },
+    {
+        "id": 33,
+        "date": "2017-05-22T07:36:42",
+        "date_gmt": "2017-05-22T07:36:42",
+        "guid": {
+            "rendered": "https://demo.wp-api.org/2017/05/22/omnis-cumque-autem-culpa-assumenda-consequatur/"
+        },
+        "modified": "2017-05-22T07:36:42",
+        "modified_gmt": "2017-05-22T07:36:42",
+        "slug": "omnis-cumque-autem-culpa-assumenda-consequatur",
+        "status": "publish",
+        "type": "post",
+        "link": "https://demo.wp-api.org/2017/05/22/omnis-cumque-autem-culpa-assumenda-consequatur/",
+        "title": {
+            "rendered": "Omnis cumque autem culpa assumenda consequatur"
+        },
+        "content": {
+            "rendered": "<h3>Molestiae qui voluptatem architecto unde. Voluptatum cupiditate exercitationem ducimus quia voluptates. Animi qui placeat non aut a</h3>\n<ul>\n<li>Voluptatem in fugit et qui</li>\n<li>Velit similique sint labore ipsa</li>\n<li>Autem non</li>\n</ul>\n<h1>Id et soluta quia laudantium. Omnis eveniet dolores suscipit enim aliquid</h1>\n<ul>\n<li>Maxime et quia ad eos</li>\n<li>Sit iure tenetur ut</li>\n<li>Illo non sed placeat</li>\n<li>Quisquam pariatur invento [...]
+            "protected": false
+        },
+        "excerpt": {
+            "rendered": "<p>Molestiae qui voluptatem architecto unde. Voluptatum cupiditate exercitationem ducimus quia voluptates. Animi qui placeat non aut a Voluptatem in fugit et qui Velit similique sint labore ipsa Autem non Id et soluta quia laudantium. Omnis eveniet dolores suscipit enim aliquid Maxime et quia ad eos Sit iure tenetur ut Illo non sed placeat Quisquam pariatur &hellip; </p>\n<p class=\"link-more\"><a href=\"https://demo.wp-api.org/2017/05/22/omnis-cumque-autem-culpa [...]
+            "protected": false
+        },
+        "author": 1,
+        "featured_media": 32,
+        "comment_status": "open",
+        "ping_status": "open",
+        "sticky": false,
+        "template": "",
+        "format": "standard",
+        "meta": [],
+        "categories": [
+            2,
+            1
+        ],
+        "tags": [
+            4
+        ],
+        "_links": {
+            "self": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/33"
+                }
+            ],
+            "collection": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts"
+                }
+            ],
+            "about": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/types/post"
+                }
+            ],
+            "author": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1"
+                }
+            ],
+            "replies": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/comments?post=33"
+                }
+            ],
+            "version-history": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/33/revisions"
+                }
+            ],
+            "wp:featuredmedia": [
+                {
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media/32"
+                }
+            ],
+            "wp:attachment": [
+                {
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/media?parent=33"
+                }
+            ],
+            "wp:term": [
+                {
+                    "taxonomy": "category",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/categories?post=33"
+                },
+                {
+                    "taxonomy": "post_tag",
+                    "embeddable": true,
+                    "href": "https://demo.wp-api.org/wp-json/wp/v2/tags?post=33"
+                }
+            ],
+            "curies": [
+                {
+                    "name": "wp",
+                    "href": "https://api.w.org/{rel}",
+                    "templated": true
+                }
+            ]
+        }
+    }
+]
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/data/posts/single.json b/components/camel-wordpress/src/test/resources/data/posts/single.json
new file mode 100644
index 0000000..5713258
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/posts/single.json
@@ -0,0 +1,95 @@
+{
+    "id": 1,
+    "date": "2017-05-23T06:25:50",
+    "date_gmt": "2017-05-23T06:25:50",
+    "guid": {
+        "rendered": "http://demo.wp-api.org/?p=1"
+    },
+    "modified": "2017-05-23T06:25:50",
+    "modified_gmt": "2017-05-23T06:25:50",
+    "slug": "hello-world",
+    "status": "publish",
+    "type": "post",
+    "link": "https://demo.wp-api.org/2017/05/23/hello-world/",
+    "title": {
+        "rendered": "Hello world!"
+    },
+    "content": {
+        "rendered": "<p>Welcome to <a href=\"http://wp-api.org/\">WP API Demo Sites</a>. This is your first post. Edit or delete it, then start blogging!</p>\n",
+        "protected": false
+    },
+    "excerpt": {
+        "rendered": "<p>Welcome to WP API Demo Sites. This is your first post. Edit or delete it, then start blogging!</p>\n",
+        "protected": false
+    },
+    "author": 1,
+    "featured_media": 0,
+    "comment_status": "open",
+    "ping_status": "open",
+    "sticky": false,
+    "template": "",
+    "format": "standard",
+    "meta": [],
+    "categories": [
+        1
+    ],
+    "tags": [],
+    "_links": {
+        "self": [
+            {
+                "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/1"
+            }
+        ],
+        "collection": [
+            {
+                "href": "https://demo.wp-api.org/wp-json/wp/v2/posts"
+            }
+        ],
+        "about": [
+            {
+                "href": "https://demo.wp-api.org/wp-json/wp/v2/types/post"
+            }
+        ],
+        "author": [
+            {
+                "embeddable": true,
+                "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1"
+            }
+        ],
+        "replies": [
+            {
+                "embeddable": true,
+                "href": "https://demo.wp-api.org/wp-json/wp/v2/comments?post=1"
+            }
+        ],
+        "version-history": [
+            {
+                "href": "https://demo.wp-api.org/wp-json/wp/v2/posts/1/revisions"
+            }
+        ],
+        "wp:attachment": [
+            {
+                "href": "https://demo.wp-api.org/wp-json/wp/v2/media?parent=1"
+            }
+        ],
+        "wp:term": [
+            {
+                "taxonomy": "category",
+                "embeddable": true,
+                "href": "https://demo.wp-api.org/wp-json/wp/v2/categories?post=1"
+            },
+            {
+                "taxonomy": "post_tag",
+                "embeddable": true,
+                "href": "https://demo.wp-api.org/wp-json/wp/v2/tags?post=1"
+            }
+        ],
+        "curies": [
+            {
+                "name": "wp",
+                "href": "https://api.w.org/{rel}",
+                "templated": true
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/data/posts/update.json b/components/camel-wordpress/src/test/resources/data/posts/update.json
new file mode 100644
index 0000000..aaff8a3
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/posts/update.json
@@ -0,0 +1,100 @@
+{
+    "id": 9,
+    "date": "2018-01-19T19:03:50",
+    "date_gmt": "2018-01-19T21:03:50",
+    "guid": {
+        "rendered": "http://wordpress4j.org/it/?p=9",
+        "raw": "http://wordpress4j.org/it/?p=9"
+    },
+    "modified": "2018-01-19T19:03:50",
+    "modified_gmt": "2018-01-19T21:03:50",
+    "password": "",
+    "slug": "",
+    "status": "draft",
+    "type": "post",
+    "link": "http://wordpress4j.org/it/?p=9",
+    "title": {
+        "raw": "hello from postman 2 - update",
+        "rendered": "hello from postman 2 &#8211; update"
+    },
+    "content": {
+        "raw": "hello world",
+        "rendered": "<p>hello world</p>\n",
+        "protected": false
+    },
+    "excerpt": {
+        "raw": "",
+        "rendered": "<p>hello world</p>\n",
+        "protected": false
+    },
+    "author": 2,
+    "featured_media": 0,
+    "comment_status": "open",
+    "ping_status": "open",
+    "sticky": false,
+    "template": "",
+    "format": "standard",
+    "meta": [],
+    "categories": [
+        1
+    ],
+    "tags": [],
+    "_links": {
+        "self": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/posts/9"
+            }
+        ],
+        "collection": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/posts"
+            }
+        ],
+        "about": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/types/post"
+            }
+        ],
+        "author": [
+            {
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/users/2"
+            }
+        ],
+        "replies": [
+            {
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/comments?post=9"
+            }
+        ],
+        "version-history": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/posts/9/revisions"
+            }
+        ],
+        "wp:attachment": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/media?parent=9"
+            }
+        ],
+        "wp:term": [
+            {
+                "taxonomy": "category",
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/categories?post=9"
+            },
+            {
+                "taxonomy": "post_tag",
+                "embeddable": true,
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/tags?post=9"
+            }
+        ],
+        "curies": [
+            {
+                "name": "wp",
+                "href": "https://api.w.org/{rel}",
+                "templated": true
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/data/users/create.json b/components/camel-wordpress/src/test/resources/data/users/create.json
new file mode 100644
index 0000000..c496a02
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/users/create.json
@@ -0,0 +1 @@
+{"id":3,"username":"bdenbrough","name":"Bill Denbrough","first_name":"Bill","last_name":"Denbrough","email":"bill.denbrough@derry.com","url":"","description":"","link":"http:\/\/wordpress4j.org\/it\/author\/bdenbrough\/","locale":"en_US","nickname":"Big Bill","slug":"bdenbrough","roles":["subscriber"],"registered_date":"2018-01-15T20:59:34+00:00","capabilities":{"read":true,"level_0":true,"subscriber":true},"extra_capabilities":{"subscriber":true},"avatar_urls":{"24":"http:\/\/2.gravatar [...]
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/data/users/create2.json b/components/camel-wordpress/src/test/resources/data/users/create2.json
new file mode 100644
index 0000000..9768ade
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/users/create2.json
@@ -0,0 +1,44 @@
+{
+    "id": 4,
+    "username": "bmarsh",
+    "name": "Beverly Marsh",
+    "first_name": "Beverly",
+    "last_name": "Marsh",
+    "email": "beverly.marsh@derry.com",
+    "url": "",
+    "description": "",
+    "link": "http://wordpress4j.org/it/author/bmarsh/",
+    "locale": "en_US",
+    "nickname": "Bevs",
+    "slug": "bmarsh",
+    "roles": [
+        "subscriber"
+    ],
+    "registered_date": "2018-01-22T18:37:30+00:00",
+    "capabilities": {
+        "read": true,
+        "level_0": true,
+        "subscriber": true
+    },
+    "extra_capabilities": {
+        "subscriber": true
+    },
+    "avatar_urls": {
+        "24": "http://2.gravatar.com/avatar/59f4cb30904bb00e7de35f85087ee98e?s=24&d=mm&r=g",
+        "48": "http://2.gravatar.com/avatar/59f4cb30904bb00e7de35f85087ee98e?s=48&d=mm&r=g",
+        "96": "http://2.gravatar.com/avatar/59f4cb30904bb00e7de35f85087ee98e?s=96&d=mm&r=g"
+    },
+    "meta": [],
+    "_links": {
+        "self": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/users/4"
+            }
+        ],
+        "collection": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/users"
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/data/users/delete.json b/components/camel-wordpress/src/test/resources/data/users/delete.json
new file mode 100644
index 0000000..450919c
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/users/delete.json
@@ -0,0 +1,35 @@
+{
+    "deleted": true,
+    "previous": {
+        "id": 4,
+        "username": "bmarsh",
+        "name": "Beverly Marsh",
+        "first_name": "Beverly",
+        "last_name": "Marsh",
+        "email": "beverly.marsh@derry.com",
+        "url": "",
+        "description": "",
+        "link": "http://wordpress4j.org/it/author/bmarsh/",
+        "locale": "en_US",
+        "nickname": "Bevs",
+        "slug": "bmarsh",
+        "roles": [
+            "subscriber"
+        ],
+        "registered_date": "2018-01-22T18:37:30+00:00",
+        "capabilities": {
+            "read": true,
+            "level_0": true,
+            "subscriber": true
+        },
+        "extra_capabilities": {
+            "subscriber": true
+        },
+        "avatar_urls": {
+            "24": "http://2.gravatar.com/avatar/59f4cb30904bb00e7de35f85087ee98e?s=24&d=mm&r=g",
+            "48": "http://2.gravatar.com/avatar/59f4cb30904bb00e7de35f85087ee98e?s=48&d=mm&r=g",
+            "96": "http://2.gravatar.com/avatar/59f4cb30904bb00e7de35f85087ee98e?s=96&d=mm&r=g"
+        },
+        "meta": []
+    }
+}
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/data/users/list.json b/components/camel-wordpress/src/test/resources/data/users/list.json
new file mode 100644
index 0000000..6ad1e5d
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/users/list.json
@@ -0,0 +1 @@
+[{"id":1,"name":"adminwp","url":"","description":"","link":"http:\/\/wordpress4j.org\/it\/author\/adminwp\/","slug":"adminwp","avatar_urls":{"24":"http:\/\/2.gravatar.com\/avatar\/2fa4264c8d235ef978d7fd70a461cc52?s=24&d=mm&r=g","48":"http:\/\/2.gravatar.com\/avatar\/2fa4264c8d235ef978d7fd70a461cc52?s=48&d=mm&r=g","96":"http:\/\/2.gravatar.com\/avatar\/2fa4264c8d235ef978d7fd70a461cc52?s=96&d=mm&r=g"},"meta":[],"_links":{"self":[{"href":"http:\/\/wordpress4j.org\/it\/wp-json\/wp\/v2\/users [...]
diff --git a/components/camel-wordpress/src/test/resources/data/users/single.json b/components/camel-wordpress/src/test/resources/data/users/single.json
new file mode 100644
index 0000000..1708ab4
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/users/single.json
@@ -0,0 +1 @@
+{"id":3,"name":"Bill Denbrough","url":"","description":"","link":"http:\/\/wordpress4j.org\/it\/author\/bdenbrough\/","slug":"bdenbrough","avatar_urls":{"24":"http:\/\/2.gravatar.com\/avatar\/510fa040c02295f8eb72183173115c99?s=24&d=mm&r=g","48":"http:\/\/2.gravatar.com\/avatar\/510fa040c02295f8eb72183173115c99?s=48&d=mm&r=g","96":"http:\/\/2.gravatar.com\/avatar\/510fa040c02295f8eb72183173115c99?s=96&d=mm&r=g"},"meta":[],"_links":{"self":[{"href":"http:\/\/wordpress4j.org\/it\/wp-json\/w [...]
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/data/users/update.json b/components/camel-wordpress/src/test/resources/data/users/update.json
new file mode 100644
index 0000000..1ebd803
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/data/users/update.json
@@ -0,0 +1,103 @@
+{
+    "id": 1,
+    "username": "adminwp",
+    "name": "adminwp",
+    "first_name": "",
+    "last_name": "",
+    "email": "admin@email.com",
+    "url": "",
+    "description": "this blog admin",
+    "link": "http://wordpress4j.org/it/author/adminwp/",
+    "locale": "en_US",
+    "nickname": "adminwp",
+    "slug": "adminwp",
+    "roles": [
+        "administrator"
+    ],
+    "registered_date": "2018-01-09T20:51:04+00:00",
+    "capabilities": {
+        "switch_themes": true,
+        "edit_themes": true,
+        "activate_plugins": true,
+        "edit_plugins": true,
+        "edit_users": true,
+        "edit_files": true,
+        "manage_options": true,
+        "moderate_comments": true,
+        "manage_categories": true,
+        "manage_links": true,
+        "upload_files": true,
+        "import": true,
+        "unfiltered_html": true,
+        "edit_posts": true,
+        "edit_others_posts": true,
+        "edit_published_posts": true,
+        "publish_posts": true,
+        "edit_pages": true,
+        "read": true,
+        "level_10": true,
+        "level_9": true,
+        "level_8": true,
+        "level_7": true,
+        "level_6": true,
+        "level_5": true,
+        "level_4": true,
+        "level_3": true,
+        "level_2": true,
+        "level_1": true,
+        "level_0": true,
+        "edit_others_pages": true,
+        "edit_published_pages": true,
+        "publish_pages": true,
+        "delete_pages": true,
+        "delete_others_pages": true,
+        "delete_published_pages": true,
+        "delete_posts": true,
+        "delete_others_posts": true,
+        "delete_published_posts": true,
+        "delete_private_posts": true,
+        "edit_private_posts": true,
+        "read_private_posts": true,
+        "delete_private_pages": true,
+        "edit_private_pages": true,
+        "read_private_pages": true,
+        "delete_users": true,
+        "create_users": true,
+        "unfiltered_upload": true,
+        "edit_dashboard": true,
+        "update_plugins": true,
+        "delete_plugins": true,
+        "install_plugins": true,
+        "update_themes": true,
+        "install_themes": true,
+        "update_core": true,
+        "list_users": true,
+        "remove_users": true,
+        "promote_users": true,
+        "edit_theme_options": true,
+        "delete_themes": true,
+        "export": true,
+        "administrator": true
+    },
+    "extra_capabilities": {
+        "administrator": true
+    },
+    "avatar_urls": {
+        "24": "http://2.gravatar.com/avatar/2fa4264c8d235ef978d7fd70a461cc52?s=24&d=mm&r=g",
+        "48": "http://2.gravatar.com/avatar/2fa4264c8d235ef978d7fd70a461cc52?s=48&d=mm&r=g",
+        "96": "http://2.gravatar.com/avatar/2fa4264c8d235ef978d7fd70a461cc52?s=96&d=mm&r=g"
+    },
+    "meta": [],
+    "_links": {
+        "self": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/users/1"
+            }
+        ],
+        "collection": [
+            {
+                "href": "http://wordpress4j.org/it/wp-json/wp/v2/users"
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/components/camel-wordpress/src/test/resources/log4j2.properties b/components/camel-wordpress/src/test/resources/log4j2.properties
new file mode 100644
index 0000000..fb3f182
--- /dev/null
+++ b/components/camel-wordpress/src/test/resources/log4j2.properties
@@ -0,0 +1,35 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-wordpress.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d %-5p %c{1} - %m %n
+appender.console.type = Console
+appender.console.name = console
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
+logger.wordpress.name = org.apache.camel.component.wordpress
+logger.wordpress.level = TRACE
+logger.apache.name = org.apache
+logger.apache.level = DEBUG
+logger.cxf.name = org.apache.cxf
+logger.cxf.level = FINE
+
+rootLogger.level = FINE
+rootLogger.appenderRef.file.ref = console
\ No newline at end of file
diff --git a/components/pom.xml b/components/pom.xml
index 5f44c2e..13a0501 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -304,6 +304,7 @@
     <module>camel-vertx</module>
     <module>camel-weather</module>
     <module>camel-websocket</module>
+    <module>camel-wordpress</module>
     <module>camel-xchange</module>
     <module>camel-xmlbeans</module>
     <module>camel-xmljson</module>
diff --git a/parent/pom.xml b/parent/pom.xml
index a4ab0d3..6a9b33e 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -2168,6 +2168,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-wordpress</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xmlbeans</artifactId>
         <version>${project.version}</version>
       </dependency>
@@ -3537,6 +3542,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-wordpress-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xmlbeans-starter</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/platforms/spring-boot/components-starter/camel-wordpress-starter/pom.xml b/platforms/spring-boot/components-starter/camel-wordpress-starter/pom.xml
new file mode 100644
index 0000000..6b19f39
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-wordpress-starter/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>components-starter</artifactId>
+    <version>2.21.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>camel-wordpress-starter</artifactId>
+  <packaging>jar</packaging>
+  <name>Spring-Boot Starter :: Camel :: Wordpress</name>
+  <description>Spring-Boot Starter for Wordpress REST API support</description>
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+      <version>${spring-boot-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-wordpress</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <!--START OF GENERATED CODE-->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core-starter</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-spring-boot-starter</artifactId>
+    </dependency>
+    <!--END OF GENERATED CODE-->
+  </dependencies>
+</project>
diff --git a/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/java/org/apache/camel/component/wordpress/springboot/WordpressComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/java/org/apache/camel/component/wordpress/springboot/WordpressComponentAutoConfiguration.java
new file mode 100644
index 0000000..30e1634
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/java/org/apache/camel/component/wordpress/springboot/WordpressComponentAutoConfiguration.java
@@ -0,0 +1,128 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.springboot;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.wordpress.WordpressComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spi.HasId;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
+import org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@Configuration
+@Conditional({ConditionalOnCamelContextAndAutoConfigurationBeans.class,
+        WordpressComponentAutoConfiguration.GroupConditions.class})
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        WordpressComponentConfiguration.class})
+public class WordpressComponentAutoConfiguration {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(WordpressComponentAutoConfiguration.class);
+    @Autowired
+    private ApplicationContext applicationContext;
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired
+    private WordpressComponentConfiguration configuration;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<WordpressComponent>> customizers;
+
+    static class GroupConditions extends GroupCondition {
+        public GroupConditions() {
+            super("camel.component", "camel.component.wordpress");
+        }
+    }
+
+    @Lazy
+    @Bean(name = "wordpress-component")
+    @ConditionalOnMissingBean(WordpressComponent.class)
+    public WordpressComponent configureWordpressComponent() throws Exception {
+        WordpressComponent component = new WordpressComponent();
+        component.setCamelContext(camelContext);
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(configuration, parameters, null,
+                false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    CamelPropertiesHelper.setCamelProperties(camelContext,
+                            nestedProperty, nestedParameters, false);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
+            }
+        }
+        CamelPropertiesHelper.setCamelProperties(camelContext, component,
+                parameters, false);
+        if (ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<WordpressComponent> customizer : customizers) {
+                boolean useCustomizer = (customizer instanceof HasId)
+                        ? HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.wordpress.customizer",
+                                ((HasId) customizer).getId())
+                        : HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.wordpress.customizer");
+                if (useCustomizer) {
+                    LOGGER.debug("Configure component {}, with customizer {}",
+                            component, customizer);
+                    customizer.customize(component);
+                }
+            }
+        }
+        return component;
+    }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/java/org/apache/camel/component/wordpress/springboot/WordpressComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/java/org/apache/camel/component/wordpress/springboot/WordpressComponentConfiguration.java
new file mode 100644
index 0000000..bb7dd7b
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/java/org/apache/camel/component/wordpress/springboot/WordpressComponentConfiguration.java
@@ -0,0 +1,142 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.wordpress.springboot;
+
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.component.wordpress.api.model.SearchCriteria;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.NestedConfigurationProperty;
+
+/**
+ * Represents a Wordpress endpoint.
+ * 
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@ConfigurationProperties(prefix = "camel.component.wordpress")
+public class WordpressComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
+
+    /**
+     * Wordpress component configuration
+     */
+    private WordpressComponentConfigurationNestedConfiguration configuration;
+    /**
+     * Whether the component should resolve property placeholders on itself when
+     * starting. Only properties which are of String type can use property
+     * placeholders.
+     */
+    private Boolean resolvePropertyPlaceholders = true;
+
+    public WordpressComponentConfigurationNestedConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    public void setConfiguration(
+            WordpressComponentConfigurationNestedConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    public Boolean getResolvePropertyPlaceholders() {
+        return resolvePropertyPlaceholders;
+    }
+
+    public void setResolvePropertyPlaceholders(
+            Boolean resolvePropertyPlaceholders) {
+        this.resolvePropertyPlaceholders = resolvePropertyPlaceholders;
+    }
+
+    public static class WordpressComponentConfigurationNestedConfiguration {
+        public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.wordpress.WordpressComponentConfiguration.class;
+        private String url;
+        private String apiVersion = "2";
+        private String password;
+        private String user;
+        private Integer id;
+        private Boolean force = false;
+        @NestedConfigurationProperty
+        private SearchCriteria searchCriteria;
+        private Map criteriaProperties;
+
+        public String getUrl() {
+            return url;
+        }
+
+        public void setUrl(String url) {
+            this.url = url;
+        }
+
+        public String getApiVersion() {
+            return apiVersion;
+        }
+
+        public void setApiVersion(String apiVersion) {
+            this.apiVersion = apiVersion;
+        }
+
+        public String getPassword() {
+            return password;
+        }
+
+        public void setPassword(String password) {
+            this.password = password;
+        }
+
+        public String getUser() {
+            return user;
+        }
+
+        public void setUser(String user) {
+            this.user = user;
+        }
+
+        public Integer getId() {
+            return id;
+        }
+
+        public void setId(Integer id) {
+            this.id = id;
+        }
+
+        public Boolean getForce() {
+            return force;
+        }
+
+        public void setForce(Boolean force) {
+            this.force = force;
+        }
+
+        public SearchCriteria getSearchCriteria() {
+            return searchCriteria;
+        }
+
+        public void setSearchCriteria(SearchCriteria searchCriteria) {
+            this.searchCriteria = searchCriteria;
+        }
+
+        public Map getCriteriaProperties() {
+            return criteriaProperties;
+        }
+
+        public void setCriteriaProperties(Map criteriaProperties) {
+            this.criteriaProperties = criteriaProperties;
+        }
+    }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/resources/META-INF/LICENSE.txt b/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/resources/META-INF/NOTICE.txt b/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/resources/META-INF/NOTICE.txt
@@ -0,0 +1,11 @@
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Apache Camel distribution.                    ==
+   =========================================================================
+
+   This product includes software developed by
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Please read the different LICENSE files present in the licenses directory of
+   this distribution.
diff --git a/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..51e8130
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-wordpress-starter/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,19 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
... 48 lines suppressed ...

-- 
To stop receiving notification emails like this one, please contact
acosentino@apache.org.