You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jl...@apache.org on 2006/10/19 12:26:02 UTC

svn commit: r465554 - in /incubator/cxf/trunk/rt/frontend/jaxws/src: main/java/org/apache/cxf/jaxws/handler/soap/ test/java/org/apache/cxf/jaxws/handler/soap/

Author: jliu
Date: Thu Oct 19 03:25:52 2006
New Revision: 465554

URL: http://svn.apache.org/viewvc?view=rev&rev=465554
Log:
Added test for SOAPHandlerInterceptor, fixed a problem when SOAPHandler.getHeaders() returns null.

Added:
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.java
Modified:
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java?view=diff&rev=465554&r1=465553&r2=465554
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java Thu Oct 19 03:25:52 2006
@@ -49,10 +49,13 @@
     
     @SuppressWarnings("unchecked")
     public Set<QName> getUnderstoodHeaders() {
-        Set<QName> understood = new HashSet<QName>();  
+        Set<QName> understood = new HashSet<QName>();
         for (Handler h : getBinding().getHandlerChain()) {
             if (h instanceof SOAPHandler) {
-                understood.addAll(((SOAPHandler)h).getHeaders());
+                Set<QName> headers = ((SOAPHandler) h).getHeaders();
+                if (headers != null) {
+                    understood.addAll(headers);
+                }
             }
         }
         return understood;

Added: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.java?view=auto&rev=465554
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.java Thu Oct 19 03:25:52 2006
@@ -0,0 +1,123 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxws.handler.soap;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Binding;
+import javax.xml.ws.handler.Handler;
+import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.soap.SOAPHandler;
+import javax.xml.ws.handler.soap.SOAPMessageContext;
+
+import junit.framework.TestCase;
+
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.jaxws.handler.HandlerChainInvoker;
+import org.apache.cxf.message.Exchange;
+
+import org.easymock.classextension.IMocksControl;
+
+import static org.easymock.EasyMock.expect;
+import static org.easymock.classextension.EasyMock.createNiceControl;
+
+public class SOAPHandlerInterceptorTest extends TestCase {
+
+    public void setUp() {
+    }
+
+    public void tearDown() {
+    }
+
+    public void testInterceptSuccess() {
+        List<Handler> list = new ArrayList<Handler>();
+        list.add(new SOAPHandler<SOAPMessageContext>() {
+            public boolean handleMessage(SOAPMessageContext smc) {
+                return true;
+            }
+
+            public boolean handleFault(SOAPMessageContext smc) {
+                return true;
+            }
+
+            public Set<QName> getHeaders() {
+                return null;
+            }
+
+            public void close(MessageContext messageContext) {
+            }
+        });
+        HandlerChainInvoker invoker = new HandlerChainInvoker(list);
+
+        IMocksControl control = createNiceControl();
+        Binding binding = control.createMock(Binding.class);
+        SoapMessage message = control.createMock(SoapMessage.class);
+        Exchange exchange = control.createMock(Exchange.class);
+        expect(message.getExchange()).andReturn(exchange);
+        expect(message.keySet()).andReturn(new HashSet<String>());
+        expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker);
+        control.replay();
+
+        SOAPHandlerInterceptor li = new SOAPHandlerInterceptor(binding);
+        li.handleMessage(message);
+        control.verify();
+    }
+
+    public void testgetUnderstoodHeadersReturnsNull() {
+        List<Handler> list = new ArrayList<Handler>();
+        list.add(new SOAPHandler<SOAPMessageContext>() {
+            public boolean handleMessage(SOAPMessageContext smc) {
+                return true;
+            }
+
+            public boolean handleFault(SOAPMessageContext smc) {
+                return true;
+            }
+
+            public Set<QName> getHeaders() {
+                return null;
+            }
+
+            public void close(MessageContext messageContext) {
+            }
+        });
+        HandlerChainInvoker invoker = new HandlerChainInvoker(list);
+
+        IMocksControl control = createNiceControl();
+        Binding binding = control.createMock(Binding.class);
+        SoapMessage message = control.createMock(SoapMessage.class);
+        Exchange exchange = control.createMock(Exchange.class);
+        expect(binding.getHandlerChain()).andReturn(list);
+        expect(message.getExchange()).andReturn(exchange);
+        expect(message.keySet()).andReturn(new HashSet<String>());
+        expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker);
+        control.replay();
+
+        SOAPHandlerInterceptor li = new SOAPHandlerInterceptor(binding);
+        Set<QName> understood = li.getUnderstoodHeaders();
+        assertNotNull(understood);
+        assertTrue(understood.isEmpty());
+    }
+
+}



Re: svn commit: r465554 - in /incubator/cxf/trunk/rt/frontend/jaxws/src: main/java/org/apache/cxf/jaxws/handler/soap/ test/java/org/apache/cxf/jaxws/handler/soap/

Posted by Daniel Kulp <da...@iona.com>.
Jervis,

Your SVN auto properties are not setup properly.   The file you added did 
not have the eol-style svn property set so it was screwed up on Unix.

Can you make sure your svn client is setup properly?   The list of 
properties is in cxf/trunk/etc/svn-auto-props.


Thanks!
Dan


On Thursday October 19 2006 6:26 am, jliu@apache.org wrote:
> Author: jliu
> Date: Thu Oct 19 03:25:52 2006
> New Revision: 465554
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=465554
> Log:
> Added test for SOAPHandlerInterceptor, fixed a problem when
> SOAPHandler.getHeaders() returns null.
>
> Added:
>    
> incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxw
>s/handler/soap/
> incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptorTest.java Modified:
>    
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptor.java
>
> Modified:
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptor.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/
>main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java?
>view=diff&rev=465554&r1=465553&r2=465554
> =======================================================================
>======= ---
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptor.java (original) +++
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptor.java Thu Oct 19 03:25:52 2006 @@
> -49,10 +49,13 @@
>
>      @SuppressWarnings("unchecked")
>      public Set<QName> getUnderstoodHeaders() {
> -        Set<QName> understood = new HashSet<QName>();
> +        Set<QName> understood = new HashSet<QName>();
>          for (Handler h : getBinding().getHandlerChain()) {
>              if (h instanceof SOAPHandler) {
> -                understood.addAll(((SOAPHandler)h).getHeaders());
> +                Set<QName> headers = ((SOAPHandler) h).getHeaders();
> +                if (headers != null) {
> +                    understood.addAll(headers);
> +                }
>              }
>          }
>          return understood;
>
> Added:
> incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptorTest.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/
>test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.j
>ava?view=auto&rev=465554
> =======================================================================
>======= ---
> incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptorTest.java (added) +++
> incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptorTest.java Thu Oct 19 03:25:52 2006
> @@ -0,0 +1,123 @@
> +/**
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +package org.apache.cxf.jaxws.handler.soap;
> +
> +import java.util.ArrayList;
> +import java.util.HashSet;
> +import java.util.List;
> +import java.util.Set;
> +
> +import javax.xml.namespace.QName;
> +import javax.xml.ws.Binding;
> +import javax.xml.ws.handler.Handler;
> +import javax.xml.ws.handler.MessageContext;
> +import javax.xml.ws.handler.soap.SOAPHandler;
> +import javax.xml.ws.handler.soap.SOAPMessageContext;
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.cxf.binding.soap.SoapMessage;
> +import org.apache.cxf.jaxws.handler.HandlerChainInvoker;
> +import org.apache.cxf.message.Exchange;
> +
> +import org.easymock.classextension.IMocksControl;
> +
> +import static org.easymock.EasyMock.expect;
> +import static org.easymock.classextension.EasyMock.createNiceControl;
> +
> +public class SOAPHandlerInterceptorTest extends TestCase {
> +
> +    public void setUp() {
> +    }
> +
> +    public void tearDown() {
> +    }
> +
> +    public void testInterceptSuccess() {
> +        List<Handler> list = new ArrayList<Handler>();
> +        list.add(new SOAPHandler<SOAPMessageContext>() {
> +            public boolean handleMessage(SOAPMessageContext smc) {
> +                return true;
> +            }
> +
> +            public boolean handleFault(SOAPMessageContext smc) {
> +                return true;
> +            }
> +
> +            public Set<QName> getHeaders() {
> +                return null;
> +            }
> +
> +            public void close(MessageContext messageContext) {
> +            }
> +        });
> +        HandlerChainInvoker invoker = new HandlerChainInvoker(list);
> +
> +        IMocksControl control = createNiceControl();
> +        Binding binding = control.createMock(Binding.class);
> +        SoapMessage message = control.createMock(SoapMessage.class);
> +        Exchange exchange = control.createMock(Exchange.class);
> +        expect(message.getExchange()).andReturn(exchange);
> +        expect(message.keySet()).andReturn(new HashSet<String>());
> +       
> expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker); +  
>      control.replay();
> +
> +        SOAPHandlerInterceptor li = new
> SOAPHandlerInterceptor(binding); +        li.handleMessage(message);
> +        control.verify();
> +    }
> +
> +    public void testgetUnderstoodHeadersReturnsNull() {
> +        List<Handler> list = new ArrayList<Handler>();
> +        list.add(new SOAPHandler<SOAPMessageContext>() {
> +            public boolean handleMessage(SOAPMessageContext smc) {
> +                return true;
> +            }
> +
> +            public boolean handleFault(SOAPMessageContext smc) {
> +                return true;
> +            }
> +
> +            public Set<QName> getHeaders() {
> +                return null;
> +            }
> +
> +            public void close(MessageContext messageContext) {
> +            }
> +        });
> +        HandlerChainInvoker invoker = new HandlerChainInvoker(list);
> +
> +        IMocksControl control = createNiceControl();
> +        Binding binding = control.createMock(Binding.class);
> +        SoapMessage message = control.createMock(SoapMessage.class);
> +        Exchange exchange = control.createMock(Exchange.class);
> +        expect(binding.getHandlerChain()).andReturn(list);
> +        expect(message.getExchange()).andReturn(exchange);
> +        expect(message.keySet()).andReturn(new HashSet<String>());
> +       
> expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker); +  
>      control.replay();
> +
> +        SOAPHandlerInterceptor li = new
> SOAPHandlerInterceptor(binding); +        Set<QName> understood =
> li.getUnderstoodHeaders();
> +        assertNotNull(understood);
> +        assertTrue(understood.isEmpty());
> +    }
> +
> +}

-- 
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194   F:781-902-8001
daniel.kulp@iona.com

Re: svn commit: r465554 - in /incubator/cxf/trunk/rt/frontend/jaxws/src: main/java/org/apache/cxf/jaxws/handler/soap/ test/java/org/apache/cxf/jaxws/handler/soap/

Posted by Daniel Kulp <da...@iona.com>.
Jervis,

Your SVN auto properties are not setup properly.   The file you added did 
not have the eol-style svn property set so it was screwed up on Unix.

Can you make sure your svn client is setup properly?   The list of 
properties is in cxf/trunk/etc/svn-auto-props.


Thanks!
Dan


On Thursday October 19 2006 6:26 am, jliu@apache.org wrote:
> Author: jliu
> Date: Thu Oct 19 03:25:52 2006
> New Revision: 465554
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=465554
> Log:
> Added test for SOAPHandlerInterceptor, fixed a problem when
> SOAPHandler.getHeaders() returns null.
>
> Added:
>    
> incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxw
>s/handler/soap/
> incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptorTest.java Modified:
>    
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptor.java
>
> Modified:
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptor.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/
>main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java?
>view=diff&rev=465554&r1=465553&r2=465554
> =======================================================================
>======= ---
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptor.java (original) +++
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptor.java Thu Oct 19 03:25:52 2006 @@
> -49,10 +49,13 @@
>
>      @SuppressWarnings("unchecked")
>      public Set<QName> getUnderstoodHeaders() {
> -        Set<QName> understood = new HashSet<QName>();
> +        Set<QName> understood = new HashSet<QName>();
>          for (Handler h : getBinding().getHandlerChain()) {
>              if (h instanceof SOAPHandler) {
> -                understood.addAll(((SOAPHandler)h).getHeaders());
> +                Set<QName> headers = ((SOAPHandler) h).getHeaders();
> +                if (headers != null) {
> +                    understood.addAll(headers);
> +                }
>              }
>          }
>          return understood;
>
> Added:
> incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptorTest.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/
>test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.j
>ava?view=auto&rev=465554
> =======================================================================
>======= ---
> incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptorTest.java (added) +++
> incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxw
>s/handler/soap/SOAPHandlerInterceptorTest.java Thu Oct 19 03:25:52 2006
> @@ -0,0 +1,123 @@
> +/**
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +package org.apache.cxf.jaxws.handler.soap;
> +
> +import java.util.ArrayList;
> +import java.util.HashSet;
> +import java.util.List;
> +import java.util.Set;
> +
> +import javax.xml.namespace.QName;
> +import javax.xml.ws.Binding;
> +import javax.xml.ws.handler.Handler;
> +import javax.xml.ws.handler.MessageContext;
> +import javax.xml.ws.handler.soap.SOAPHandler;
> +import javax.xml.ws.handler.soap.SOAPMessageContext;
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.cxf.binding.soap.SoapMessage;
> +import org.apache.cxf.jaxws.handler.HandlerChainInvoker;
> +import org.apache.cxf.message.Exchange;
> +
> +import org.easymock.classextension.IMocksControl;
> +
> +import static org.easymock.EasyMock.expect;
> +import static org.easymock.classextension.EasyMock.createNiceControl;
> +
> +public class SOAPHandlerInterceptorTest extends TestCase {
> +
> +    public void setUp() {
> +    }
> +
> +    public void tearDown() {
> +    }
> +
> +    public void testInterceptSuccess() {
> +        List<Handler> list = new ArrayList<Handler>();
> +        list.add(new SOAPHandler<SOAPMessageContext>() {
> +            public boolean handleMessage(SOAPMessageContext smc) {
> +                return true;
> +            }
> +
> +            public boolean handleFault(SOAPMessageContext smc) {
> +                return true;
> +            }
> +
> +            public Set<QName> getHeaders() {
> +                return null;
> +            }
> +
> +            public void close(MessageContext messageContext) {
> +            }
> +        });
> +        HandlerChainInvoker invoker = new HandlerChainInvoker(list);
> +
> +        IMocksControl control = createNiceControl();
> +        Binding binding = control.createMock(Binding.class);
> +        SoapMessage message = control.createMock(SoapMessage.class);
> +        Exchange exchange = control.createMock(Exchange.class);
> +        expect(message.getExchange()).andReturn(exchange);
> +        expect(message.keySet()).andReturn(new HashSet<String>());
> +       
> expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker); +  
>      control.replay();
> +
> +        SOAPHandlerInterceptor li = new
> SOAPHandlerInterceptor(binding); +        li.handleMessage(message);
> +        control.verify();
> +    }
> +
> +    public void testgetUnderstoodHeadersReturnsNull() {
> +        List<Handler> list = new ArrayList<Handler>();
> +        list.add(new SOAPHandler<SOAPMessageContext>() {
> +            public boolean handleMessage(SOAPMessageContext smc) {
> +                return true;
> +            }
> +
> +            public boolean handleFault(SOAPMessageContext smc) {
> +                return true;
> +            }
> +
> +            public Set<QName> getHeaders() {
> +                return null;
> +            }
> +
> +            public void close(MessageContext messageContext) {
> +            }
> +        });
> +        HandlerChainInvoker invoker = new HandlerChainInvoker(list);
> +
> +        IMocksControl control = createNiceControl();
> +        Binding binding = control.createMock(Binding.class);
> +        SoapMessage message = control.createMock(SoapMessage.class);
> +        Exchange exchange = control.createMock(Exchange.class);
> +        expect(binding.getHandlerChain()).andReturn(list);
> +        expect(message.getExchange()).andReturn(exchange);
> +        expect(message.keySet()).andReturn(new HashSet<String>());
> +       
> expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker); +  
>      control.replay();
> +
> +        SOAPHandlerInterceptor li = new
> SOAPHandlerInterceptor(binding); +        Set<QName> understood =
> li.getUnderstoodHeaders();
> +        assertNotNull(understood);
> +        assertTrue(understood.isEmpty());
> +    }
> +
> +}

-- 
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194   F:781-902-8001
daniel.kulp@iona.com