Add JSON Processing support Using Apache Johnzon
Project: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/repo Commit: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/commit/3a247ce5 Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/3a247ce5 Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/3a247ce5 Branch: refs/heads/master Commit: 3a247ce564dfff362a21872b00b727cc273fc509 Parents: 35d8116 Author: Carlos Sierra <csie...@apache.org> Authored: Fri May 11 16:21:27 2018 +0200 Committer: Carlos Sierra <csie...@apache.org> Committed: Mon May 14 16:29:07 2018 +0200 ---------------------------------------------------------------------- jax-rs.itests-jsonp/LICENSE | 202 ++++++++++++ jax-rs.itests-jsonp/bnd.bnd | 24 ++ jax-rs.itests-jsonp/itest.bndrun | 46 +++ jax-rs.itests-jsonp/logback.xml | 15 + jax-rs.itests-jsonp/pom.xml | 197 ++++++++++++ .../src/main/java/test/JsonPTest.java | 39 +++ .../main/java/test/types/TestApplication.java | 40 +++ .../src/main/java/test/types/TestHelper.java | 309 +++++++++++++++++++ .../main/java/test/types/TestJSONPAddon.java | 39 +++ jax-rs.itests/itest.bndrun | 1 - jax-rs.itests/src/main/java/test/JaxBTest.java | 6 - jax-rs.jsonp/LICENSE | 202 ++++++++++++ jax-rs.jsonp/bnd.bnd | 23 ++ jax-rs.jsonp/pom.xml | 102 ++++++ .../jsonp/activator/JsonpBundleActivator.java | 96 ++++++ pom.xml | 5 +- 16 files changed, 1338 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.itests-jsonp/LICENSE ---------------------------------------------------------------------- diff --git a/jax-rs.itests-jsonp/LICENSE b/jax-rs.itests-jsonp/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/jax-rs.itests-jsonp/LICENSE @@ -0,0 +1,202 @@ + + 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. http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.itests-jsonp/bnd.bnd ---------------------------------------------------------------------- diff --git a/jax-rs.itests-jsonp/bnd.bnd b/jax-rs.itests-jsonp/bnd.bnd new file mode 100644 index 0000000..422f326 --- /dev/null +++ b/jax-rs.itests-jsonp/bnd.bnd @@ -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. + +Bundle-Description: Integration Test bundle for the JSON-P Whiteboard support + +Test-Cases: \ + ${classes;CONCRETE;EXTENDS;junit.framework.TestCase},\ + ${classes;CONCRETE;ANNOTATED;org.junit.Test} + +Require-Capability: osgi.service;filter:="(objectClass=org.osgi.service.cm.ConfigurationAdmin)" http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.itests-jsonp/itest.bndrun ---------------------------------------------------------------------- diff --git a/jax-rs.itests-jsonp/itest.bndrun b/jax-rs.itests-jsonp/itest.bndrun new file mode 100644 index 0000000..d82927d --- /dev/null +++ b/jax-rs.itests-jsonp/itest.bndrun @@ -0,0 +1,46 @@ +-standalone: ${.}/target/index.xml + +-runrequires: \ + osgi.identity;filter:='(osgi.identity=org.apache.aries.jax.rs.itests-jsonp)',\ + osgi.identity;filter:='(osgi.identity=org.apache.aries.jax.rs.whiteboard)',\ + osgi.identity;filter:='(osgi.identity=org.apache.aries.jax.rs.jsonp)',\ + osgi.identity;filter:='(osgi.identity=ch.qos.logback.classic)' + +-runfw: org.eclipse.osgi;version='[3.10.100.v20150529-1857,3.10.100.v20150529-1857]' + +#-runtrace: true + +-runee: JavaSE-1.8 +-resolve.effective: resolve, active + +-runsystemcapabilities: ${native_capability} +-runproperties: \ + logback.configurationFile=file:${.}/logback.xml,\ + osgi.console.enable.builtin=false, \ + osgi.console=, \ + org.apache.felix.http.host=localhost,\ + org.osgi.service.http.port=* +-runblacklist:\ + osgi.identity;filter:='(osgi.identity=org.osgi.compendium)',\ + osgi.identity;filter:='(osgi.identity=osgi.cmpn)' +-runbundles: \ + ch.qos.logback.classic;version='[1.2.3,1.2.4)',\ + ch.qos.logback.core;version='[1.2.3,1.2.4)',\ + org.apache.aries.javax.annotation-api;version='[0.0.1,0.0.2)',\ + org.apache.aries.javax.jax.rs-api;version='[0.0.1,0.0.2)',\ + org.apache.aries.jax.rs.whiteboard;version='[0.0.1,0.0.2)',\ + org.apache.felix.configadmin;version='[1.8.14,1.8.15)',\ + org.apache.felix.eventadmin;version='[1.4.8,1.4.9)',\ + org.apache.felix.http.api;version='[3.0.0,3.0.1)',\ + org.apache.felix.http.jetty;version='[3.4.0,3.4.1)',\ + org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\ + org.osgi.service.jaxrs;version='[1.0.0,1.0.1)',\ + org.osgi.util.function;version='[1.1.0,1.1.1)',\ + org.osgi.util.promise;version='[1.1.0,1.1.1)',\ + osgi.enroute.hamcrest.wrapper;version='[1.3.0,1.3.1)',\ + osgi.enroute.junit.wrapper;version='[4.12.0,4.12.1)',\ + slf4j.api;version='[1.7.25,1.7.26)',\ + org.apache.aries.jax.rs.jsonp;version='[0.0.1,0.0.2)',\ + org.apache.servicemix.specs.json-api-1.1;version='[2.9.0,2.9.1)',\ + org.apache.aries.jax.rs.itests-jsonp;version='[0.0.1,0.0.2)' +-include: -personal.bnd http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.itests-jsonp/logback.xml ---------------------------------------------------------------------- diff --git a/jax-rs.itests-jsonp/logback.xml b/jax-rs.itests-jsonp/logback.xml new file mode 100644 index 0000000..1952216 --- /dev/null +++ b/jax-rs.itests-jsonp/logback.xml @@ -0,0 +1,15 @@ +<configuration> + <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"> + <resetJUL>true</resetJUL> + </contextListener> + + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> + </encoder> + </appender> + + <root level="error"> + <appender-ref ref="STDOUT" /> + </root> +</configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.itests-jsonp/pom.xml ---------------------------------------------------------------------- diff --git a/jax-rs.itests-jsonp/pom.xml b/jax-rs.itests-jsonp/pom.xml new file mode 100644 index 0000000..3e9ab24 --- /dev/null +++ b/jax-rs.itests-jsonp/pom.xml @@ -0,0 +1,197 @@ +<?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/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.aries.jax.rs</groupId> + <artifactId>org.apache.aries.jax.rs</artifactId> + <version>0.0.1-SNAPSHOT</version> + <relativePath>..</relativePath> + </parent> + + <artifactId>org.apache.aries.jax.rs.itests-jsonp</artifactId> + <description>Apache Aries JAX-RS Integration Tests</description> + <name>Apache Aries JAX-RS Integration Tests</name> + + <properties> + <maven.deploy.skip>true</maven.deploy.skip> + <maven.install.skip>true</maven.install.skip> + </properties> + + <build> + <plugins> + <plugin> + <groupId>biz.aQute.bnd</groupId> + <artifactId>bnd-indexer-maven-plugin</artifactId> + <configuration> + <includeJar>true</includeJar> + <localURLs>REQUIRED</localURLs> + </configuration> + </plugin> + <plugin> + <groupId>biz.aQute.bnd</groupId> + <artifactId>bnd-maven-plugin</artifactId> + </plugin> + <plugin> + <groupId>biz.aQute.bnd</groupId> + <artifactId>bnd-resolver-maven-plugin</artifactId> + <configuration> + <failOnChanges>false</failOnChanges> + <bndruns> + <bndrun>itest.bndrun</bndrun> + </bndruns> + </configuration> + </plugin> + <plugin> + <groupId>biz.aQute.bnd</groupId> + <artifactId>bnd-testing-maven-plugin</artifactId> + <configuration> + <failOnChanges>true</failOnChanges> + <resolve>false</resolve> + <bndruns> + <bndrun>itest.bndrun</bndrun> + </bndruns> + </configuration> + </plugin> + </plugins> + </build> + <dependencies> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + <version>1.2.3</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>osgi.core</artifactId> + <version>6.0.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.service.cm</artifactId> + <version>1.5.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.service.http.whiteboard</artifactId> + <version>1.0.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.aries.jax.rs</groupId> + <artifactId>org.apache.aries.jax.rs.whiteboard</artifactId> + <version>0.0.1-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.apache.aries.jax.rs</groupId> + <artifactId>org.apache.aries.jax.rs.jsonp</artifactId> + <version>0.0.1-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.apache.aries.jax.rs</groupId> + <artifactId>org.apache.aries.jax.rs.itests-fragment</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.aries.spec</groupId> + <artifactId>org.apache.aries.javax.jax.rs-api</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.configadmin</artifactId> + <version>1.8.14</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.eventadmin</artifactId> + <version>1.4.8</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.http.jetty</artifactId> + <version>3.4.0</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.scr</artifactId> + <version>2.0.8</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.eclipse.osgi</artifactId> + <version>3.10.100.v20150529-1857</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.apache.servicemix.specs</groupId> + <artifactId>org.apache.servicemix.specs.json-api-1.1</artifactId> + <version>2.9.0</version> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.service.jaxrs</artifactId> + <version>1.0.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.util.function</artifactId> + <version>1.1.0</version> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.util.promise</artifactId> + <version>1.1.0</version> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>osgi.enroute.junit.wrapper</artifactId> + <version>4.12.0</version> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>osgi.enroute.hamcrest.wrapper</artifactId> + <version>1.3.0</version> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-core</artifactId> + <version>${cxf.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-frontend-jaxrs</artifactId> + <version>${cxf.version}</version> + <scope>provided</scope> + </dependency> + </dependencies> +</project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.itests-jsonp/src/main/java/test/JsonPTest.java ---------------------------------------------------------------------- diff --git a/jax-rs.itests-jsonp/src/main/java/test/JsonPTest.java b/jax-rs.itests-jsonp/src/main/java/test/JsonPTest.java new file mode 100644 index 0000000..cb30ff1 --- /dev/null +++ b/jax-rs.itests-jsonp/src/main/java/test/JsonPTest.java @@ -0,0 +1,39 @@ +/* + * 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 test; + +import org.junit.Test; +import test.types.TestHelper; +import test.types.TestJSONPAddon; + +import javax.ws.rs.client.WebTarget; + +import static org.junit.Assert.assertTrue; + +public class JsonPTest extends TestHelper { + + @Test + public void testJSONPEndpoint() { + WebTarget webTarget = createDefaultTarget().path("jsonobject"); + + registerAddon(new TestJSONPAddon()); + + assertTrue(webTarget.request().get(String.class).contains("key")); + } + +} http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.itests-jsonp/src/main/java/test/types/TestApplication.java ---------------------------------------------------------------------- diff --git a/jax-rs.itests-jsonp/src/main/java/test/types/TestApplication.java b/jax-rs.itests-jsonp/src/main/java/test/types/TestApplication.java new file mode 100644 index 0000000..b58e1e0 --- /dev/null +++ b/jax-rs.itests-jsonp/src/main/java/test/types/TestApplication.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 test.types; + +import java.util.Collections; +import java.util.Set; + +import javax.ws.rs.GET; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Application; + +public class TestApplication extends Application { + + @Override + public Set<Object> getSingletons() { + return Collections.<Object>singleton(this); + } + + @GET + @Produces("text/plain") + public String sayHello() { + return "Hello application"; + } + +} http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.itests-jsonp/src/main/java/test/types/TestHelper.java ---------------------------------------------------------------------- diff --git a/jax-rs.itests-jsonp/src/main/java/test/types/TestHelper.java b/jax-rs.itests-jsonp/src/main/java/test/types/TestHelper.java new file mode 100644 index 0000000..a9ae9fc --- /dev/null +++ b/jax-rs.itests-jsonp/src/main/java/test/types/TestHelper.java @@ -0,0 +1,309 @@ +/* + * 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 test.types; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.container.ContainerResponseFilter; +import javax.ws.rs.core.Application; + +import org.junit.After; +import org.junit.Before; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.PrototypeServiceFactory; +import org.osgi.framework.ServiceFactory; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.ServiceRegistration; +import org.osgi.service.cm.ConfigurationAdmin; +import org.osgi.service.jaxrs.client.SseEventSourceFactory; +import org.osgi.service.jaxrs.runtime.JaxrsServiceRuntime; +import org.osgi.service.jaxrs.runtime.dto.RuntimeDTO; +import org.osgi.util.tracker.ServiceTracker; + +import static org.junit.Assert.assertTrue; +import static org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants.JAX_RS_APPLICATION_BASE; +import static org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants.JAX_RS_EXTENSION; +import static org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants.JAX_RS_NAME; +import static org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants.JAX_RS_RESOURCE; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Dictionary; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.function.Function; +import java.util.function.Predicate; + +public class TestHelper { + + public static BundleContext bundleContext = + FrameworkUtil. + getBundle(TestHelper.class). + getBundleContext(); + + protected Collection<ServiceRegistration<?>> _registrations = + new ArrayList<>(); + protected ServiceTracker<JaxrsServiceRuntime, JaxrsServiceRuntime> + _runtimeTracker; + protected ServiceTracker<ClientBuilder, ClientBuilder> + _clientBuilderTracker; + protected JaxrsServiceRuntime _runtime; + protected ServiceReference<JaxrsServiceRuntime> _runtimeServiceReference; + + @After + public void tearDown() { + Iterator<ServiceRegistration<?>> iterator = _registrations.iterator(); + + while (iterator.hasNext()) { + ServiceRegistration<?> registration = iterator.next(); + + try { + registration.unregister(); + } + catch(Exception e) { + } + finally { + iterator.remove(); + } + } + + if (_runtimeTracker != null) { + _runtimeTracker.close(); + } + + _clientBuilderTracker.close(); + + _configurationAdminTracker.close(); + + _sseEventSourceFactoryTracker.close(); + } + + @Before + public void before() { + _clientBuilderTracker = new ServiceTracker<>( + bundleContext, ClientBuilder.class, null); + + _clientBuilderTracker.open(); + + _configurationAdminTracker = new ServiceTracker<>( + bundleContext, ConfigurationAdmin.class, null); + + _configurationAdminTracker.open(); + + _sseEventSourceFactoryTracker = new ServiceTracker<>( + bundleContext, SseEventSourceFactory.class, null); + + _sseEventSourceFactoryTracker.open(); + + _runtimeTracker = new ServiceTracker<>( + bundleContext, JaxrsServiceRuntime.class, null); + + _runtimeTracker.open(); + + try { + _runtime = _runtimeTracker.waitForService(15000L); + } + catch (InterruptedException e) { + throw new RuntimeException(e); + } + + _runtimeServiceReference = _runtimeTracker.getServiceReference(); + } + + private ServiceTracker<ConfigurationAdmin, ConfigurationAdmin> + _configurationAdminTracker; + + private ServiceTracker<SseEventSourceFactory, SseEventSourceFactory> + _sseEventSourceFactoryTracker; + + @SuppressWarnings("unchecked") + private static String[] canonicalize(Object propertyValue) { + if (propertyValue == null) { + return new String[0]; + } + if (propertyValue instanceof String[]) { + return (String[]) propertyValue; + } + if (propertyValue instanceof Collection) { + return ((Collection<String>) propertyValue).toArray(new String[0]); + } + + return new String[]{propertyValue.toString()}; + } + + public ConfigurationAdmin getConfigurationAdmin() { + + try { + return _configurationAdminTracker.waitForService(5000); + } + catch (InterruptedException e) { + throw new IllegalStateException(e); + } + } + + protected Client createClient() { + ClientBuilder clientBuilder; + + try { + clientBuilder = _clientBuilderTracker.waitForService(5000); + + return clientBuilder.build(); + } + catch (InterruptedException ie) { + throw new RuntimeException(ie); + } + } + + protected SseEventSourceFactory createSseFactory() { + try { + return _sseEventSourceFactoryTracker.waitForService(5000); + } + catch (InterruptedException ie) { + throw new RuntimeException(ie); + } + } + + protected WebTarget createDefaultTarget() { + Client client = createClient(); + + String[] runtimes = canonicalize( + _runtimeServiceReference.getProperty("osgi.jaxrs.endpoint")); + + if (runtimes.length == 0) { + throw new IllegalStateException( + "No runtimes could be found on \"osgi.jaxrs.endpoint\" " + + "runtime service property "); + } + + String runtime = runtimes[0]; + + return client.target(runtime); + } + + protected static long getServiceId(ServiceRegistration<?> propertyHolder) { + return (long)propertyHolder.getReference().getProperty("service.id"); + } + + protected <T> void assertThatInRuntime( + Function<RuntimeDTO, T[]> getter, Predicate<T> predicate) { + + assertTrue( + Arrays.stream(getter.apply(getRuntimeDTO())).anyMatch(predicate)); + } + + protected JaxrsServiceRuntime getJaxrsServiceRuntime() + throws InterruptedException { + + _runtimeTracker = new ServiceTracker<>( + bundleContext, JaxrsServiceRuntime.class, null); + + _runtimeTracker.open(); + + return _runtimeTracker.waitForService(15000L); + } + + protected RuntimeDTO getRuntimeDTO() { + return _runtime.getRuntimeDTO(); + } + + protected ServiceRegistration<?> registerAddon( + Object instance, Object... keyValues) { + + Dictionary<String, Object> properties = new Hashtable<>(); + + properties.put(JAX_RS_RESOURCE, "true"); + + for (int i = 0; i < keyValues.length; i = i + 2) { + properties.put(keyValues[i].toString(), keyValues[i + 1]); + } + + ServiceRegistration<Object> serviceRegistration = + bundleContext.registerService(Object.class, instance, properties); + + _registrations.add(serviceRegistration); + + return serviceRegistration; + } + + protected ServiceRegistration<Application> registerApplication( + Application application, Object... keyValues) { + + Dictionary<String, Object> properties = new Hashtable<>(); + + for (int i = 0; i < keyValues.length; i = i + 2) { + properties.put(keyValues[i].toString(), keyValues[i + 1]); + } + + if (properties.get(JAX_RS_APPLICATION_BASE) == null) { + properties.put(JAX_RS_APPLICATION_BASE, "/test-application"); + } + + ServiceRegistration<Application> serviceRegistration = + bundleContext.registerService( + Application.class, application, properties); + + _registrations.add(serviceRegistration); + + return serviceRegistration; + } + + protected ServiceRegistration<Application> registerApplication( + ServiceFactory<Application> serviceFactory, Object... keyValues) { + + Dictionary<String, Object> properties = new Hashtable<>(); + + properties.put(JAX_RS_APPLICATION_BASE, "/test-application"); + + for (int i = 0; i < keyValues.length; i = i + 2) { + properties.put(keyValues[i].toString(), keyValues[i + 1]); + } + + ServiceRegistration<Application> serviceRegistration = + bundleContext.registerService( + Application.class, serviceFactory, properties); + + _registrations.add(serviceRegistration); + + return serviceRegistration; + } + + protected <T> ServiceRegistration<T> registerExtension( + Class<T> clazz, T extension, String name, Object... keyValues) { + + Dictionary<String, Object> properties = new Hashtable<>(); + + properties.put(JAX_RS_EXTENSION, true); + properties.put(JAX_RS_NAME, name); + + for (int i = 0; i < keyValues.length; i = i + 2) { + properties.put(keyValues[i].toString(), keyValues[i + 1]); + } + + ServiceRegistration<T> serviceRegistration = + bundleContext.registerService(clazz, extension, properties); + + _registrations.add(serviceRegistration); + + return serviceRegistration; + } + +} http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.itests-jsonp/src/main/java/test/types/TestJSONPAddon.java ---------------------------------------------------------------------- diff --git a/jax-rs.itests-jsonp/src/main/java/test/types/TestJSONPAddon.java b/jax-rs.itests-jsonp/src/main/java/test/types/TestJSONPAddon.java new file mode 100644 index 0000000..b2bc773 --- /dev/null +++ b/jax-rs.itests-jsonp/src/main/java/test/types/TestJSONPAddon.java @@ -0,0 +1,39 @@ +/* + * 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 test.types; + +import javax.json.Json; +import javax.json.JsonObject; +import javax.json.JsonObjectBuilder; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +public class TestJSONPAddon { + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/jsonobject") + public JsonObject getJsonObject() { + JsonObjectBuilder builder = Json.createObjectBuilder(); + + return builder.add("key", "value").build(); + } + +} http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.itests/itest.bndrun ---------------------------------------------------------------------- diff --git a/jax-rs.itests/itest.bndrun b/jax-rs.itests/itest.bndrun index 13969fd..70c2f4f 100644 --- a/jax-rs.itests/itest.bndrun +++ b/jax-rs.itests/itest.bndrun @@ -41,4 +41,3 @@ osgi.enroute.hamcrest.wrapper;version='[1.3.0,1.3.1)',\ osgi.enroute.junit.wrapper;version='[4.12.0,4.12.1)',\ slf4j.api;version='[1.7.25,1.7.26)' --include: -personal.bnd http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.itests/src/main/java/test/JaxBTest.java ---------------------------------------------------------------------- diff --git a/jax-rs.itests/src/main/java/test/JaxBTest.java b/jax-rs.itests/src/main/java/test/JaxBTest.java index 880de75..47f37b7 100644 --- a/jax-rs.itests/src/main/java/test/JaxBTest.java +++ b/jax-rs.itests/src/main/java/test/JaxBTest.java @@ -37,8 +37,6 @@ public class JaxBTest extends TestHelper { public void testJAXBEndPoint() throws InterruptedException { WebTarget webTarget = createDefaultTarget().path("test"); - getRuntimeDTO(); - registerAddon(new TestJAXBAddon()); Response response = webTarget.request(MediaType.APPLICATION_XML).get(); @@ -53,8 +51,6 @@ public class JaxBTest extends TestHelper { public void testJAXBClientConversion() throws InterruptedException { WebTarget webTarget = createDefaultTarget().path("test"); - getRuntimeDTO(); - registerAddon(new TestJAXBAddon()); Product product = webTarget.request(MediaType.APPLICATION_XML).get(Product.class); @@ -69,8 +65,6 @@ public class JaxBTest extends TestHelper { public void testJAXBClientPut() throws InterruptedException { WebTarget webTarget = createDefaultTarget().path("create"); - getRuntimeDTO(); - registerAddon(new TestJAXBAddon()); Product p = new Product(); http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.jsonp/LICENSE ---------------------------------------------------------------------- diff --git a/jax-rs.jsonp/LICENSE b/jax-rs.jsonp/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/jax-rs.jsonp/LICENSE @@ -0,0 +1,202 @@ + + 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. http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.jsonp/bnd.bnd ---------------------------------------------------------------------- diff --git a/jax-rs.jsonp/bnd.bnd b/jax-rs.jsonp/bnd.bnd new file mode 100644 index 0000000..948e366 --- /dev/null +++ b/jax-rs.jsonp/bnd.bnd @@ -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. + +Bundle-Activator: org.apache.aries.jax.rs.jsonp.activator.JsonpBundleActivator + +-includeresource:\ + @johnzon-core-*.jar,\ + lib/johnzon-jaxrs.jar=johnzon-jaxrs-*.jar;lib:=true,\ + lib/johnzon-mapper.jar=johnzon-mapper-*.jar;lib:=true,\ http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.jsonp/pom.xml ---------------------------------------------------------------------- diff --git a/jax-rs.jsonp/pom.xml b/jax-rs.jsonp/pom.xml new file mode 100644 index 0000000..fa812bc --- /dev/null +++ b/jax-rs.jsonp/pom.xml @@ -0,0 +1,102 @@ +<?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/xsd/maven-4.0.0.xsd" +> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.aries.jax.rs</groupId> + <artifactId>org.apache.aries.jax.rs</artifactId> + <version>0.0.1-SNAPSHOT</version> + </parent> + + <artifactId>org.apache.aries.jax.rs.jsonp</artifactId> + <description>Apache Aries JAX-RS JSON P</description> + <name>Apache Aries JAX-RS JSON P</name> + + <dependencies> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.core</artifactId> + <version>6.0.0</version> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.service.jaxrs</artifactId> + <version>1.0.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>javax.ws.rs</groupId> + <artifactId>javax.ws.rs-api</artifactId> + <version>2.1</version> + </dependency> + <dependency> + <groupId>org.apache.servicemix.specs</groupId> + <artifactId>org.apache.servicemix.specs.json-api-1.1</artifactId> + <version>2.9.0</version> + </dependency> + <dependency> + <groupId>org.apache.johnzon</groupId> + <artifactId>johnzon-jaxrs</artifactId> + <version>1.1.7</version> + </dependency> + </dependencies> + + <build> + <pluginManagement> + <plugins> + <plugin> + <groupId>com.github.hazendaz.spotbugs</groupId> + <artifactId>spotbugs-maven-plugin</artifactId> + <version>3.0.6</version> + <configuration> + <effort>Max</effort> + <threshold>Low</threshold> + <failOnError>false</failOnError> + <plugins> + <plugin> + <groupId>com.h3xstream.findsecbugs</groupId> + <artifactId>findsecbugs-plugin</artifactId> + <version>LATEST</version> + </plugin> + </plugins> + </configuration> + </plugin> + </plugins> + </pluginManagement> + <plugins> + <plugin> + <groupId>biz.aQute.bnd</groupId> + <artifactId>bnd-maven-plugin</artifactId> + </plugin> + </plugins> + </build> + + <reporting> + <plugins> + <plugin> + <groupId>com.github.hazendaz.spotbugs</groupId> + <artifactId>spotbugs-maven-plugin</artifactId> + <version>3.0.6</version> + </plugin> + </plugins> + </reporting> + +</project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/jax-rs.jsonp/src/main/java/org/apache/aries/jax/rs/jsonp/activator/JsonpBundleActivator.java ---------------------------------------------------------------------- diff --git a/jax-rs.jsonp/src/main/java/org/apache/aries/jax/rs/jsonp/activator/JsonpBundleActivator.java b/jax-rs.jsonp/src/main/java/org/apache/aries/jax/rs/jsonp/activator/JsonpBundleActivator.java new file mode 100644 index 0000000..9d8ee8d --- /dev/null +++ b/jax-rs.jsonp/src/main/java/org/apache/aries/jax/rs/jsonp/activator/JsonpBundleActivator.java @@ -0,0 +1,96 @@ +/* + * 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.aries.jax.rs.jsonp.activator; + +import org.apache.johnzon.jaxrs.JsrProvider; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; +import org.osgi.framework.PrototypeServiceFactory; +import org.osgi.framework.ServiceRegistration; +import org.osgi.framework.wiring.BundleWiring; +import org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants; + +import javax.ws.rs.ext.MessageBodyReader; +import javax.ws.rs.ext.MessageBodyWriter; +import java.util.Hashtable; + +public class JsonpBundleActivator implements BundleActivator { + + @Override + public void start(BundleContext context) throws Exception { + _serviceRegistration = context.registerService( + new String[]{ + MessageBodyReader.class.getName(), + MessageBodyWriter.class.getName() + }, + new PrototypeServiceFactory<JsrProvider>() { + @Override + public JsrProvider getService( + Bundle bundle, + ServiceRegistration<JsrProvider> registration) { + + Thread thread = Thread.currentThread(); + + ClassLoader contextClassLoader = + thread.getContextClassLoader(); + + thread.setContextClassLoader( + context. + getBundle(). + adapt(BundleWiring.class). + getClassLoader() + ); + + try { + return new JsrProvider(); + } + finally { + thread.setContextClassLoader(contextClassLoader); + } + } + + @Override + public void ungetService( + Bundle bundle, + ServiceRegistration<JsrProvider> registration, + JsrProvider service) { + + } + }, + new Hashtable<String, Object>() {{ + put(JaxrsWhiteboardConstants.JAX_RS_EXTENSION, true); + put( + JaxrsWhiteboardConstants.JAX_RS_NAME, "JSON-P"); + put(Constants.SERVICE_RANKING, Integer.MIN_VALUE); + }}); + } + + @Override + public void stop(BundleContext context) throws Exception { + try { + _serviceRegistration.unregister(); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + private ServiceRegistration<?> _serviceRegistration; +} http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a247ce5/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 77b3dce..34df407 100644 --- a/pom.xml +++ b/pom.xml @@ -49,9 +49,12 @@ <modules> <module>javax.jax.rs-api</module> <module>jax-rs.whiteboard</module> - <module>jax-rs.itests-fragment</module> <module>jax-rs.itests</module> + <module>jax-rs.itests-fragment</module> + <module>jax-rs.itests-jsonp</module> <module>jax-rs.example</module> + <module>jax-rs.jsonb</module> + <module>jax-rs.jsonp</module> </modules> <build>