You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by co...@apache.org on 2014/12/04 12:39:22 UTC
[2/3] cxf git commit: Moved JAX-RS kerberos tests to new module
Moved JAX-RS kerberos tests to new module
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/d5a58444
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/d5a58444
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/d5a58444
Branch: refs/heads/3.0.x-fixes
Commit: d5a58444e6d78bb58de03a7a9aeb46d69fdd55ea
Parents: 5131e2d
Author: Colm O hEigeartaigh <co...@apache.org>
Authored: Thu Dec 4 11:16:37 2014 +0000
Committer: Colm O hEigeartaigh <co...@apache.org>
Committed: Thu Dec 4 11:19:52 2014 +0000
----------------------------------------------------------------------
parent/pom.xml | 6 +
systests/jaxrs/pom.xml | 1 -
.../jaxrs/security/BookKerberosServer.java | 68 ------
.../jaxrs/security/JAXRSKerberosBookTest.java | 137 -----------
.../cxf/systest/jaxrs/security/kerberos.cfg | 22 --
.../systest/jaxrs/security/kerberosClient.xml | 47 ----
systests/kerberos/pom.xml | 14 ++
.../systest/kerberos/jaxrs/kerberos/Book.java | 124 ++++++++++
.../jaxrs/kerberos/BookKerberosServer.java | 67 ++++++
.../jaxrs/kerberos/BookNotFoundDetails.java | 36 +++
.../jaxrs/kerberos/BookNotFoundFault.java | 41 ++++
.../kerberos/jaxrs/kerberos/BookStore.java | 80 +++++++
.../kerberos/jaxrs/kerberos/BookStoreImpl.java | 111 +++++++++
.../kerberos/jaxrs/kerberos/Chapter.java | 106 +++++++++
.../jaxrs/kerberos/JAXRSKerberosBookTest.java | 226 +++++++++++++++++++
.../kerberos/jaxrs/kerberos/SuperBook.java | 45 ++++
.../jaxrs/kerberos/SuperBookInterface.java | 23 ++
.../kerberos/jaxrs/kerberos/kerberosClient.xml | 47 ++++
18 files changed, 926 insertions(+), 275 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 6a0f4f4..2f152d7 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -94,6 +94,7 @@
<cxf.httpcomponents.client.version>4.3.5</cxf.httpcomponents.client.version>
<cxf.httpcomponents.core.version>4.3.3</cxf.httpcomponents.core.version>
<cxf.httpcomponents.core.version.range>[4.3,4.4.0)</cxf.httpcomponents.core.version.range>
+ <cxf.jackson.version>2.4.1</cxf.jackson.version>
<cxf.james.mim4j.version>0.7.2</cxf.james.mim4j.version>
<cxf.logback.classic.version>1.0.13</cxf.logback.classic.version>
<cxf.log4j.version>1.2.17</cxf.log4j.version>
@@ -1387,6 +1388,11 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>com.fasterxml.jackson.jaxrs</groupId>
+ <artifactId>jackson-jaxrs-json-provider</artifactId>
+ <version>${cxf.jackson.version}</version>
+ </dependency>
+ <dependency>
<groupId>${cxf.asm.groupId}</groupId>
<artifactId>${cxf.asm.artifactId}</artifactId>
<version>${cxf.asm.version}</version>
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/jaxrs/pom.xml
----------------------------------------------------------------------
diff --git a/systests/jaxrs/pom.xml b/systests/jaxrs/pom.xml
index 7a864be..df25eb3 100644
--- a/systests/jaxrs/pom.xml
+++ b/systests/jaxrs/pom.xml
@@ -398,7 +398,6 @@
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
- <version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/BookKerberosServer.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/BookKerberosServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/BookKerberosServer.java
deleted file mode 100644
index 7e6df48..0000000
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/BookKerberosServer.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * 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.cxf.systest.jaxrs.security;
-
-import javax.security.auth.callback.CallbackHandler;
-
-import org.apache.cxf.interceptor.security.NamePasswordCallbackHandler;
-import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
-import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
-import org.apache.cxf.jaxrs.security.KerberosAuthenticationFilter;
-import org.apache.cxf.systest.jaxrs.BookStore;
-import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
-import org.apache.cxf.testutil.common.TestUtil;
-
-public class BookKerberosServer extends AbstractBusTestServerBase {
- public static final String PORT = TestUtil.getPortNumber("jaxrs-kerberos");
-
- protected void run() {
-
- JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
- sf.setResourceClasses(BookStore.class);
- //default lifecycle is per-request, change it to singleton
- sf.setResourceProvider(BookStore.class,
- new SingletonResourceProvider(new BookStore()));
- KerberosAuthenticationFilter filter = new KerberosAuthenticationFilter();
- filter.setLoginContextName("KerberosServer");
- filter.setCallbackHandler(getCallbackHandler("HTTP/localhost", "http"));
- //filter.setLoginContextName("KerberosServerKeyTab");
- //filter.setServicePrincipalName("HTTP/ktab");
- sf.setProvider(filter);
- sf.setAddress("http://localhost:" + PORT + "/");
-
- sf.create();
- }
-
- public static void main(String[] args) {
- try {
- BookKerberosServer s = new BookKerberosServer();
- s.start();
- } catch (Exception ex) {
- ex.printStackTrace();
- System.exit(-1);
- } finally {
- System.out.println("done!");
- }
- }
-
- public static CallbackHandler getCallbackHandler(final String username, final String password) {
- return new NamePasswordCallbackHandler(username, password);
- }
-}
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/JAXRSKerberosBookTest.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/JAXRSKerberosBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/JAXRSKerberosBookTest.java
deleted file mode 100644
index 1a05eaa..0000000
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/JAXRSKerberosBookTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * 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.cxf.systest.jaxrs.security;
-
-import org.apache.cxf.configuration.security.AuthorizationPolicy;
-import org.apache.cxf.interceptor.LoggingOutInterceptor;
-import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
-import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.cxf.jaxrs.security.KerberosAuthOutInterceptor;
-import org.apache.cxf.systest.jaxrs.Book;
-import org.apache.cxf.systest.jaxrs.BookStore;
-import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
-import org.apache.cxf.transport.http.auth.HttpAuthHeader;
-
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-
-
-public class JAXRSKerberosBookTest extends AbstractBusClientServerTestBase {
- public static final String PORT = BookKerberosServer.PORT;
-
- private static final String KERBEROS_CONFIG_FILE =
- "org/apache/cxf/systest/jaxrs/security/kerberosClient.xml";
-
- @BeforeClass
- public static void startServers() throws Exception {
- String jaasConfig = JAXRSKerberosBookTest.class
- .getResource("/org/apache/cxf/systest/jaxrs/security/kerberos.cfg").toURI().getPath();
- System.setProperty("java.security.auth.login.config", jaasConfig);
-
- assertTrue("server did not launch correctly",
- launchServer(BookKerberosServer.class, true));
- }
-
- @Test
- @Ignore
- public void testGetBookWithConfigInHttpConduit() throws Exception {
- doTestGetBook123Proxy(KERBEROS_CONFIG_FILE);
- }
-
- private void doTestGetBook123Proxy(String configFile) throws Exception {
- BookStore bs = JAXRSClientFactory.create("http://localhost:" + PORT, BookStore.class,
- configFile);
- WebClient.getConfig(bs).getOutInterceptors().add(new LoggingOutInterceptor());
- // just to verify the interface call goes through CGLIB proxy too
- assertEquals("http://localhost:" + PORT, WebClient.client(bs).getBaseURI().toString());
- Book b = bs.getBook("123");
- assertEquals(b.getId(), 123);
- b = bs.getBook("123");
- assertEquals(b.getId(), 123);
- }
-
- @Test
- @Ignore
- public void testGetBookWithInterceptor() throws Exception {
- WebClient wc = WebClient.create("http://localhost:" + PORT + "/bookstore/books/123");
-
- KerberosAuthOutInterceptor kbInterceptor = new KerberosAuthOutInterceptor();
-
- AuthorizationPolicy policy = new AuthorizationPolicy();
- policy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_NEGOTIATE);
- policy.setAuthorization("KerberosClient");
- policy.setUserName("alice");
- policy.setPassword("alice");
-
- kbInterceptor.setPolicy(policy);
- kbInterceptor.setCredDelegation(true);
-
- WebClient.getConfig(wc).getOutInterceptors().add(new LoggingOutInterceptor());
- WebClient.getConfig(wc).getOutInterceptors().add(kbInterceptor);
-
- Book b = wc.get(Book.class);
- assertEquals(b.getId(), 123);
- }
-
- @Test
- @Ignore
- public void testGetBookWithInterceptorAndKeyTab() throws Exception {
- WebClient wc = WebClient.create("http://localhost:" + PORT + "/bookstore/books/123");
-
- KerberosAuthOutInterceptor kbInterceptor = new KerberosAuthOutInterceptor();
-
- AuthorizationPolicy policy = new AuthorizationPolicy();
- policy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_NEGOTIATE);
- policy.setAuthorization("KerberosClientKeyTab");
-
- kbInterceptor.setPolicy(policy);
- kbInterceptor.setCredDelegation(true);
-
- WebClient.getConfig(wc).getOutInterceptors().add(new LoggingOutInterceptor());
- WebClient.getConfig(wc).getOutInterceptors().add(kbInterceptor);
-
- Book b = wc.get(Book.class);
- assertEquals(b.getId(), 123);
- }
-
- @Test
- @Ignore
- public void testGetBookWithInterceptorServiceKeyTab() throws Exception {
- WebClient wc = WebClient.create("http://localhost:" + PORT + "/bookstore/books/123");
-
- KerberosAuthOutInterceptor kbInterceptor = new KerberosAuthOutInterceptor();
-
- AuthorizationPolicy policy = new AuthorizationPolicy();
- policy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_NEGOTIATE);
- policy.setAuthorization("KerberosClient");
- policy.setUserName("alice");
- policy.setPassword("alice");
-
- kbInterceptor.setPolicy(policy);
- kbInterceptor.setServicePrincipalName("HTTP/ktab");
-
- WebClient.getConfig(wc).getOutInterceptors().add(new LoggingOutInterceptor());
- WebClient.getConfig(wc).getOutInterceptors().add(kbInterceptor);
-
- Book b = wc.get(Book.class);
- assertEquals(b.getId(), 123);
- }
-}
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/kerberos.cfg
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/kerberos.cfg b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/kerberos.cfg
deleted file mode 100644
index 42f55d6..0000000
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/kerberos.cfg
+++ /dev/null
@@ -1,22 +0,0 @@
-KerberosClient {
- com.sun.security.auth.module.Krb5LoginModule required client=TRUE;
-};
-KerberosClientKeyTab {
- com.sun.security.auth.module.Krb5LoginModule required
- client=TRUE
- refreshKrb5Config=true
- useKeyTab=true
- keyTab="/etc/bob.keytab"
- principal="bob";
-};
-KerberosServer {
- com.sun.security.auth.module.Krb5LoginModule required storeKey=true;
-};
-KerberosServerKeyTab {
- com.sun.security.auth.module.Krb5LoginModule required
- storeKey=true
- refreshKrb5Config=true
- useKeyTab=true
- keyTab="/etc/http.keytab"
- principal="HTTP/ktab";
-};
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/kerberosClient.xml
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/kerberosClient.xml b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/kerberosClient.xml
deleted file mode 100644
index c0064bb..0000000
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/kerberosClient.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?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.
--->
-<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:http="http://cxf.apache.org/transports/http/configuration" xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration" xmlns:sec="http://cxf.apache.org/configuration/security" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd http://cxf.apache.org/transports/http-jetty/configuration http://cxf.apache.org/schemas/configuration/http-jetty.xsd http://cxf.apache.org/configuration/security http://cxf.apache.org/schemas/configuration/security.xsd ">
- <!-- -->
- <!-- HTTP/S configuration for proxy clients -->
- <!-- -->
- <http:conduit name="{http://jaxrs.systest.cxf.apache.org/}BookStore.http-conduit">
- <http:client ConnectionTimeout="3000000" ReceiveTimeout="3000000"/>
- <http:authorization>
- <sec:UserName>alice</sec:UserName>
- <sec:Password>alice</sec:Password>
- <sec:AuthorizationType>Negotiate</sec:AuthorizationType>
- <sec:Authorization>KerberosClient</sec:Authorization>
- </http:authorization>
- </http:conduit>
- <!-- -->
- <!-- HTTP/S configuration for web clients -->
- <!--
-
- <http:conduit name="\{https://localhost\:.*\}WebClient\.http-conduit">
- <http:client ConnectionTimeout="3000000" ReceiveTimeout="3000000"/>
- <authorization>
- <AuthorizationType>Negotiate</AuthorizationType>
- <Authorization>KerberosClient</Authorization>
- <UserName>alice</UserName>
- <Password>alice</Password>
- </authorization>
- </http:conduit>
- -->
-</beans>
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/pom.xml
----------------------------------------------------------------------
diff --git a/systests/kerberos/pom.xml b/systests/kerberos/pom.xml
index 622517f..1527b3e 100644
--- a/systests/kerberos/pom.xml
+++ b/systests/kerberos/pom.xml
@@ -114,6 +114,16 @@
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-rs-client</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-rs-extension-search</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-bindings-soap</artifactId>
<version>${project.version}</version>
</dependency>
@@ -181,6 +191,10 @@
<artifactId>FastInfoset</artifactId>
</dependency>
<dependency>
+ <groupId>com.fasterxml.jackson.jaxrs</groupId>
+ <artifactId>jackson-jaxrs-json-provider</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/Book.java
----------------------------------------------------------------------
diff --git a/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/Book.java b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/Book.java
new file mode 100644
index 0000000..88e7c96
--- /dev/null
+++ b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/Book.java
@@ -0,0 +1,124 @@
+/**
+ * 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.cxf.systest.kerberos.jaxrs.kerberos;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSeeAlso;
+
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
+import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
+
+@JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY, property = "class")
+@XmlRootElement(name = "Book")
+@XmlSeeAlso(SuperBook.class)
+public class Book {
+ private String name;
+ private long id;
+ private Map<Long, Chapter> chapters = new HashMap<Long, Chapter>();
+
+ public Book() {
+ init();
+ //System.out.println("----chapters: " + chapters.size());
+ }
+
+ public Book(String name, long id) {
+ this.name = name;
+ this.id = id;
+ }
+
+ public void setName(String n) {
+ name = n;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setId(long i) {
+ id = i;
+ }
+ public long getId() {
+ return id;
+ }
+
+ @PUT
+ public void cloneState(Book book) {
+ id = book.getId();
+ name = book.getName();
+ }
+
+ @GET
+ public Book retrieveState() {
+ return this;
+ }
+
+ @GET
+ @Path("chapters/{chapterid}/")
+ @Produces("application/xml;charset=ISO-8859-1")
+ public Chapter getChapter(@PathParam("chapterid")int chapterid) {
+ return chapters.get(new Long(chapterid));
+ }
+
+ @GET
+ @Path("chapters/acceptencoding/{chapterid}/")
+ @Produces("application/xml")
+ public Chapter getChapterAcceptEncoding(@PathParam("chapterid")int chapterid) {
+ return chapters.get(new Long(chapterid));
+ }
+
+ @GET
+ @Path("chapters/badencoding/{chapterid}/")
+ @Produces("application/xml;charset=UTF-48")
+ public Chapter getChapterBadEncoding(@PathParam("chapterid")int chapterid) {
+ return chapters.get(new Long(chapterid));
+ }
+
+ @Path("chapters/sub/{chapterid}/")
+ public Chapter getSubChapter(@PathParam("chapterid")int chapterid) {
+ return chapters.get(new Long(chapterid));
+ }
+
+ @Path("chaptersobject/sub/{chapterid}/")
+ public Object getSubChapterObject(@PathParam("chapterid")int chapterid) {
+ return getSubChapter(chapterid);
+ }
+
+
+ final void init() {
+ Chapter c1 = new Chapter();
+ c1.setId(1);
+ c1.setTitle("chapter 1");
+ chapters.put(c1.getId(), c1);
+ Chapter c2 = new Chapter();
+ c2.setId(2);
+ c2.setTitle("chapter 2");
+ chapters.put(c2.getId(), c2);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookKerberosServer.java
----------------------------------------------------------------------
diff --git a/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookKerberosServer.java b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookKerberosServer.java
new file mode 100644
index 0000000..753b48f
--- /dev/null
+++ b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookKerberosServer.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.cxf.systest.kerberos.jaxrs.kerberos;
+
+import javax.security.auth.callback.CallbackHandler;
+
+import org.apache.cxf.interceptor.security.NamePasswordCallbackHandler;
+import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
+import org.apache.cxf.jaxrs.security.KerberosAuthenticationFilter;
+import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
+import org.apache.cxf.testutil.common.TestUtil;
+
+public class BookKerberosServer extends AbstractBusTestServerBase {
+ public static final String PORT = TestUtil.getPortNumber("jaxrs-kerberos");
+
+ protected void run() {
+
+ JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
+ sf.setResourceClasses(BookStore.class);
+ //default lifecycle is per-request, change it to singleton
+ sf.setResourceProvider(BookStore.class,
+ new SingletonResourceProvider(new BookStoreImpl()));
+ KerberosAuthenticationFilter filter = new KerberosAuthenticationFilter();
+ filter.setLoginContextName("bob");
+ filter.setCallbackHandler(getCallbackHandler("bob", "bob"));
+ //filter.setLoginContextName("KerberosServerKeyTab");
+ //filter.setServicePrincipalName("HTTP/ktab");
+ sf.setProvider(filter);
+ sf.setAddress("http://localhost:" + PORT + "/");
+
+ sf.create();
+ }
+
+ public static void main(String[] args) {
+ try {
+ BookKerberosServer s = new BookKerberosServer();
+ s.start();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ System.exit(-1);
+ } finally {
+ System.out.println("done!");
+ }
+ }
+
+ public static CallbackHandler getCallbackHandler(final String username, final String password) {
+ return new NamePasswordCallbackHandler(username, password);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookNotFoundDetails.java
----------------------------------------------------------------------
diff --git a/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookNotFoundDetails.java b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookNotFoundDetails.java
new file mode 100644
index 0000000..01de35b
--- /dev/null
+++ b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookNotFoundDetails.java
@@ -0,0 +1,36 @@
+/**
+ * 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.cxf.systest.kerberos.jaxrs.kerberos;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class BookNotFoundDetails {
+ private long id;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookNotFoundFault.java
----------------------------------------------------------------------
diff --git a/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookNotFoundFault.java b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookNotFoundFault.java
new file mode 100644
index 0000000..3e401c8
--- /dev/null
+++ b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookNotFoundFault.java
@@ -0,0 +1,41 @@
+/**
+ * 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.cxf.systest.kerberos.jaxrs.kerberos;
+
+import javax.xml.ws.WebFault;
+
+@WebFault
+public class BookNotFoundFault extends Exception {
+ private static final long serialVersionUID = 4833573020359208072L;
+ private BookNotFoundDetails details;
+
+ public BookNotFoundFault(String errorMessage) {
+ super(errorMessage);
+ }
+
+ public BookNotFoundFault(BookNotFoundDetails details) {
+ super();
+ this.details = details;
+ }
+
+ public BookNotFoundDetails getFaultInfo() {
+ return details;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookStore.java
----------------------------------------------------------------------
diff --git a/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookStore.java b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookStore.java
new file mode 100644
index 0000000..7639aa7
--- /dev/null
+++ b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookStore.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.cxf.systest.kerberos.jaxrs.kerberos;
+
+
+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 org.apache.cxf.annotations.GZIP;
+
+@Path("/bookstore")
+@GZIP(threshold = 1)
+public interface BookStore {
+
+ @GET
+ @Path("/")
+ Book getBookRoot();
+
+ @Path("/default")
+ @Produces("application/xml")
+ Book getDefaultBook();
+
+ @GET
+ @Path("/books/{bookId}/")
+ @Produces("application/xml")
+ Book getBook(@PathParam("bookId") String id) throws BookNotFoundFault;
+
+ @GET
+ @Path("/books/query/default")
+ @Produces("application/xml")
+ Book getBook(@QueryParam("bookId") long id) throws BookNotFoundFault;
+
+ @GET
+ @Path("/the books/{bookId}/")
+ @Produces("application/xml")
+ Book getBookWithSpace(@PathParam("bookId") String id) throws BookNotFoundFault;
+
+ @PathParam("bookId")
+ void setBookId(String id);
+
+ void setDefaultNameAndId(String name, long id);
+
+ @GET
+ @Path("/books/{bookId}/")
+ @Produces("application/json;qs=0.9")
+ Book getBookAsJSON() throws BookNotFoundFault;
+
+ public static class BookNotReturnedException extends RuntimeException {
+
+ private static final long serialVersionUID = 4935423670510083220L;
+
+ public BookNotReturnedException(String errorMessage) {
+ super(errorMessage);
+ }
+
+ }
+
+}
+
+
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookStoreImpl.java
----------------------------------------------------------------------
diff --git a/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookStoreImpl.java b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookStoreImpl.java
new file mode 100644
index 0000000..045d93d
--- /dev/null
+++ b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/BookStoreImpl.java
@@ -0,0 +1,111 @@
+/**
+ * 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.cxf.systest.kerberos.jaxrs.kerberos;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.ws.rs.PathParam;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.UriInfo;
+
+public class BookStoreImpl implements BookStore {
+ private Map<Long, Book> books = new HashMap<Long, Book>();
+ private long bookId = 123;
+
+ private String defaultName;
+ private long defaultId;
+
+ private String currentBookId;
+
+ public BookStoreImpl() {
+ init();
+ }
+ public BookStoreImpl(UriInfo ui) {
+ init();
+ }
+
+ @Override
+ public Book getBookRoot() {
+ return new Book("root", 124L);
+ }
+
+ @Override
+ public Book getDefaultBook() {
+ return new Book(defaultName, defaultId);
+ }
+
+ @Override
+ public Book getBook(@PathParam("bookId") String id) throws BookNotFoundFault {
+ return doGetBook(id);
+ }
+
+ @Override
+ public Book getBook(@QueryParam("bookId") long id) throws BookNotFoundFault {
+ return books.get(id + 123);
+ }
+
+ @Override
+ public Book getBookWithSpace(@PathParam("bookId") String id) throws BookNotFoundFault {
+ return doGetBook(id);
+ }
+
+ @Override
+ public void setBookId(String id) {
+ currentBookId = id;
+ }
+
+ public void setDefaultNameAndId(String name, long id) {
+ defaultName = name;
+ defaultId = id;
+ }
+
+ @Override
+ public Book getBookAsJSON() throws BookNotFoundFault {
+ return doGetBook(currentBookId);
+ }
+
+ private Book doGetBook(String id) throws BookNotFoundFault {
+ Book book = books.get(Long.parseLong(id));
+ if (book != null) {
+ return book;
+ } else {
+ BookNotFoundDetails details = new BookNotFoundDetails();
+ details.setId(Long.parseLong(id));
+ throw new BookNotFoundFault(details);
+ }
+ }
+
+ public final String init() {
+ books.clear();
+ bookId = 123;
+
+ Book book = new Book();
+ book.setId(bookId);
+ book.setName("CXF in Action");
+ books.put(book.getId(), book);
+
+ return "OK";
+ }
+
+}
+
+
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/Chapter.java
----------------------------------------------------------------------
diff --git a/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/Chapter.java b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/Chapter.java
new file mode 100644
index 0000000..eaebf50
--- /dev/null
+++ b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/Chapter.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.cxf.systest.kerberos.jaxrs.kerberos;
+
+import java.util.ArrayList;
+import java.util.List;
+
+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.Context;
+import javax.ws.rs.core.UriInfo;
+import javax.xml.bind.annotation.XmlRootElement;
+
+
+@XmlRootElement(name = "Chapter")
+public class Chapter {
+ private String title;
+ private long id;
+
+ public Chapter() {
+ }
+
+ public void setTitle(String n) {
+ title = n;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setId(long i) {
+ id = i;
+ }
+ public long getId() {
+ return id;
+ }
+
+ @GET
+ @Path("/recurse")
+ @Produces("application/xml")
+ public Chapter getItself() {
+ return this;
+ }
+
+ @Path("/recurse2")
+ public Chapter getItself2() {
+ return this;
+ }
+
+ @GET
+ @Produces("application/xml;charset=ISO-8859-1")
+ public Chapter get() {
+ return this;
+ }
+
+ @GET
+ @Path("/ids")
+ @Produces("application/xml;charset=ISO-8859-1")
+ public Chapter getWithBookId(@PathParam("bookId") int bookId,
+ @PathParam("chapterid") int chapterId) {
+ if (bookId != 123 || chapterId != 1) {
+ throw new RuntimeException();
+ }
+ return this;
+ }
+
+
+ @GET
+ @Path("/matched-resources")
+ @Produces("text/plain")
+ public String getMatchedResources(@Context UriInfo ui) {
+ List<String> list = new ArrayList<String>();
+ for (Object obj : ui.getMatchedResources()) {
+ list.add(obj.toString());
+ }
+ return list.toString();
+ }
+
+ @GET
+ @Path("/matched%21uris")
+ @Produces("text/plain")
+ public String getMatchedUris(@Context UriInfo ui,
+ @QueryParam("decode") String decode) {
+ return ui.getMatchedURIs(Boolean.parseBoolean(decode)).toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/JAXRSKerberosBookTest.java
----------------------------------------------------------------------
diff --git a/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/JAXRSKerberosBookTest.java b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/JAXRSKerberosBookTest.java
new file mode 100644
index 0000000..0aef664
--- /dev/null
+++ b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/JAXRSKerberosBookTest.java
@@ -0,0 +1,226 @@
+/**
+ * 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.cxf.systest.kerberos.jaxrs.kerberos;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.cxf.configuration.security.AuthorizationPolicy;
+import org.apache.cxf.interceptor.LoggingOutInterceptor;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.cxf.jaxrs.security.KerberosAuthOutInterceptor;
+import org.apache.cxf.systest.kerberos.common.SecurityTestUtil;
+import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.apache.cxf.transport.http.auth.HttpAuthHeader;
+import org.apache.cxf.transport.http.auth.SpnegoAuthSupplier;
+import org.apache.directory.server.annotations.CreateKdcServer;
+import org.apache.directory.server.annotations.CreateLdapServer;
+import org.apache.directory.server.annotations.CreateTransport;
+import org.apache.directory.server.core.annotations.ApplyLdifFiles;
+import org.apache.directory.server.core.annotations.CreateDS;
+import org.apache.directory.server.core.annotations.CreateIndex;
+import org.apache.directory.server.core.annotations.CreatePartition;
+import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
+import org.apache.directory.server.core.integ.FrameworkRunner;
+import org.apache.directory.server.core.kerberos.KeyDerivationInterceptor;
+import org.ietf.jgss.GSSName;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * A set of tests for Kerberos Tokens that use an Apache DS instance as the KDC.
+ */
+
+@RunWith(FrameworkRunner.class)
+
+//Define the DirectoryService
+@CreateDS(name = "AbstractKerberosTest-class",
+ enableAccessControl = false,
+ allowAnonAccess = false,
+ enableChangeLog = true,
+ partitions = {
+ @CreatePartition(
+ name = "example",
+ suffix = "dc=example,dc=com",
+ indexes = {
+ @CreateIndex(attribute = "objectClass"),
+ @CreateIndex(attribute = "dc"),
+ @CreateIndex(attribute = "ou")
+ }
+ ) },
+ additionalInterceptors = {
+ KeyDerivationInterceptor.class
+ }
+)
+
+@CreateLdapServer(
+ transports = {
+ @CreateTransport(protocol = "LDAP")
+ }
+)
+
+@CreateKdcServer(
+ transports = {
+ // @CreateTransport(protocol = "TCP", address = "127.0.0.1", port=1024)
+ @CreateTransport(protocol = "UDP", address = "127.0.0.1")
+ },
+ primaryRealm = "service.ws.apache.org",
+ kdcPrincipal = "krbtgt/service.ws.apache.org@service.ws.apache.org"
+)
+
+//Inject an file containing entries
+@ApplyLdifFiles("kerberos.ldif")
+
+public class JAXRSKerberosBookTest extends AbstractLdapTestUnit {
+ public static final String PORT = BookKerberosServer.PORT;
+
+ private static final String KERBEROS_CONFIG_FILE =
+ "org/apache/cxf/systest/kerberos/jaxrs/kerberos/kerberosClient.xml";
+
+ private static boolean runTests;
+ private static boolean portUpdated;
+
+ @Before
+ public void updatePort() throws Exception {
+ if (!portUpdated) {
+ String basedir = System.getProperty("basedir");
+ if (basedir == null) {
+ basedir = new File(".").getCanonicalPath();
+ }
+
+ // Read in krb5.conf and substitute in the correct port
+ File f = new File(basedir + "/src/test/resources/krb5.conf");
+
+ FileInputStream inputStream = new FileInputStream(f);
+ String content = IOUtils.toString(inputStream, "UTF-8");
+ inputStream.close();
+ content = content.replaceAll("port", "" + super.getKdcServer().getTransports()[0].getPort());
+
+ File f2 = new File(basedir + "/target/test-classes/krb5.conf");
+ FileOutputStream outputStream = new FileOutputStream(f2);
+ IOUtils.write(content, outputStream, "UTF-8");
+ outputStream.close();
+
+ System.setProperty("java.security.krb5.conf", f2.getPath());
+
+ portUpdated = true;
+ }
+ }
+
+ @BeforeClass
+ public static void startServers() throws Exception {
+
+ //
+ // This test fails with the IBM JDK
+ //
+ if (!"IBM Corporation".equals(System.getProperty("java.vendor"))) {
+ runTests = true;
+ String basedir = System.getProperty("basedir");
+ if (basedir == null) {
+ basedir = new File(".").getCanonicalPath();
+ } else {
+ basedir += "/..";
+ }
+
+ // System.setProperty("sun.security.krb5.debug", "true");
+ System.setProperty("java.security.auth.login.config",
+ basedir + "/kerberos/src/test/resources/kerberos.jaas");
+
+ }
+
+ // Launch servers
+ org.junit.Assert.assertTrue(
+ "Server failed to launch",
+ // run the server in the same process
+ // set this to false to fork
+ AbstractBusClientServerTestBase.launchServer(BookKerberosServer.class, true)
+ );
+ }
+
+ @org.junit.AfterClass
+ public static void cleanup() throws Exception {
+ SecurityTestUtil.cleanup();
+ AbstractBusClientServerTestBase.stopAllServers();
+ }
+
+ @Test
+ public void testGetBookWithConfigInHttpConduit() throws Exception {
+ if (!runTests) {
+ return;
+ }
+
+ doTestGetBook123Proxy(KERBEROS_CONFIG_FILE);
+ }
+
+ private void doTestGetBook123Proxy(String configFile) throws Exception {
+ BookStore bs = JAXRSClientFactory.create("http://localhost:" + PORT, BookStore.class,
+ configFile);
+ WebClient.getConfig(bs).getOutInterceptors().add(new LoggingOutInterceptor());
+
+ SpnegoAuthSupplier authSupplier = new SpnegoAuthSupplier();
+ authSupplier.setServicePrincipalName("bob@service.ws.apache.org");
+ authSupplier.setServiceNameType(GSSName.NT_HOSTBASED_SERVICE);
+ WebClient.getConfig(bs).getHttpConduit().setAuthSupplier(authSupplier);
+
+ // just to verify the interface call goes through CGLIB proxy too
+ Assert.assertEquals("http://localhost:" + PORT, WebClient.client(bs).getBaseURI().toString());
+ Book b = bs.getBook("123");
+ Assert.assertEquals(b.getId(), 123);
+ b = bs.getBook("123");
+ Assert.assertEquals(b.getId(), 123);
+ }
+
+ @Test
+ public void testGetBookWithInterceptor() throws Exception {
+ if (!runTests) {
+ return;
+ }
+
+ WebClient wc = WebClient.create("http://localhost:" + PORT + "/bookstore/books/123");
+
+ KerberosAuthOutInterceptor kbInterceptor = new KerberosAuthOutInterceptor();
+
+ AuthorizationPolicy policy = new AuthorizationPolicy();
+ policy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_NEGOTIATE);
+ policy.setAuthorization("alice");
+ policy.setUserName("alice");
+ policy.setPassword("alice");
+
+ kbInterceptor.setPolicy(policy);
+ kbInterceptor.setCredDelegation(true);
+
+ WebClient.getConfig(wc).getOutInterceptors().add(new LoggingOutInterceptor());
+ WebClient.getConfig(wc).getOutInterceptors().add(kbInterceptor);
+
+ // Required so as to get it working with our KDC
+ kbInterceptor.setServicePrincipalName("bob@service.ws.apache.org");
+ kbInterceptor.setServiceNameType(GSSName.NT_HOSTBASED_SERVICE);
+
+ Book b = wc.get(Book.class);
+ Assert.assertEquals(b.getId(), 123);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/SuperBook.java
----------------------------------------------------------------------
diff --git a/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/SuperBook.java b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/SuperBook.java
new file mode 100644
index 0000000..4cdbfe2
--- /dev/null
+++ b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/SuperBook.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.cxf.systest.kerberos.jaxrs.kerberos;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+
+@XmlRootElement(name = "SuperBook")
+public class SuperBook extends Book implements SuperBookInterface {
+ private boolean superBook;
+
+ public SuperBook() {
+
+ }
+
+ public SuperBook(String name, long id, boolean superStatus) {
+ super(name, id);
+ this.superBook = superStatus;
+ }
+
+ public boolean isSuperBook() {
+ return superBook;
+ }
+
+ public void setSuperBook(boolean superBook) {
+ this.superBook = superBook;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/SuperBookInterface.java
----------------------------------------------------------------------
diff --git a/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/SuperBookInterface.java b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/SuperBookInterface.java
new file mode 100644
index 0000000..4b04413
--- /dev/null
+++ b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/SuperBookInterface.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.cxf.systest.kerberos.jaxrs.kerberos;
+
+public interface SuperBookInterface {
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/d5a58444/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/kerberosClient.xml
----------------------------------------------------------------------
diff --git a/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/kerberosClient.xml b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/kerberosClient.xml
new file mode 100644
index 0000000..e8a093a
--- /dev/null
+++ b/systests/kerberos/src/test/java/org/apache/cxf/systest/kerberos/jaxrs/kerberos/kerberosClient.xml
@@ -0,0 +1,47 @@
+<?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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:http="http://cxf.apache.org/transports/http/configuration" xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration" xmlns:sec="http://cxf.apache.org/configuration/security" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd http://cxf.apache.org/transports/http-jetty/configuration http://cxf.apache.org/schemas/configuration/http-jetty.xsd http://cxf.apache.org/configuration/security http://cxf.apache.org/schemas/configuration/security.xsd ">
+ <!-- -->
+ <!-- HTTP/S configuration for proxy clients -->
+ <!-- -->
+ <http:conduit name="{http://kerberos.jaxrs.kerberos.systest.cxf.apache.org/}BookStore.http-conduit">
+ <http:client ConnectionTimeout="3000000" ReceiveTimeout="3000000"/>
+ <http:authorization>
+ <sec:UserName>alice</sec:UserName>
+ <sec:Password>alice</sec:Password>
+ <sec:AuthorizationType>Negotiate</sec:AuthorizationType>
+ <sec:Authorization>alice</sec:Authorization>
+ </http:authorization>
+ </http:conduit>
+ <!-- -->
+ <!-- HTTP/S configuration for web clients -->
+ <!--
+
+ <http:conduit name="\{https://localhost\:.*\}WebClient\.http-conduit">
+ <http:client ConnectionTimeout="3000000" ReceiveTimeout="3000000"/>
+ <authorization>
+ <AuthorizationType>Negotiate</AuthorizationType>
+ <Authorization>alice</Authorization>
+ <UserName>alice</UserName>
+ <Password>alice</Password>
+ </authorization>
+ </http:conduit>
+ -->
+</beans>