That's right, the JAX-RS part should be supported by Brave already thanks
to dedicated CXF integration (I was involved in late-stage discussions for
the PR in question but not in the implementation).

Best Regards,
    Andriy Redko

On Tue, Dec 6, 2016 at 12:09 PM, Christian Schneider <
[email protected]> wrote:

> My orignal plan was to just support SOAP as REST is well supported by brave
> rest support already.
> In the end my code was able to support both REST and SOAP without much
> overhead so I removed the soap package again.
>
> Christian
>
> 2016-12-06 14:41 GMT+01:00 Sergey Beryozkin <[email protected]>:
>
> > Christian, what is SOAP specific in this code ?
> > Looks like that can work with JAX-RS too ?
> >
> > Usually we try to accommodate both frontends, example, Andriy Redko made
> > sure HTrace interceptors work for JAXWS, similarly for Bean validation
> >
> > Sergey
> >
> >
> >
> > On 06/12/16 13:36, [email protected] wrote:
> >
> >> Repository: cxf
> >> Updated Branches:
> >>   refs/heads/master 892a4ca84 -> fd77d3f33
> >>
> >>
> >> [CXF-7164] Support tracing using Zipkin Brave
> >>
> >>
> >> Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
> >> Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/fd77d3f3
> >> Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/fd77d3f3
> >> Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/fd77d3f3
> >>
> >> Branch: refs/heads/master
> >> Commit: fd77d3f3380f805db3547d37cbb2ff72bd033ad0
> >> Parents: 892a4ca
> >> Author: Christian Schneider <[email protected]>
> >> Authored: Tue Dec 6 14:35:35 2016 +0100
> >> Committer: Christian Schneider <[email protected]>
> >> Committed: Tue Dec 6 14:36:01 2016 +0100
> >>
> >> ----------------------------------------------------------------------
> >>  rt/features/pom.xml                             |   1 +
> >>  rt/features/tracing-brave/pom.xml               |  87 +++++++++++++
> >>  .../brave/soap/CxfHttpClientRequest.java        |  49 ++++++++
> >>  .../tracing/brave/soap/CxfServerRequest.java    |  48 ++++++++
> >>  .../cxf/tracing/brave/soap/HttpResponse200.java |  28 +++++
> >>  .../cxf/tracing/brave/soap/ParsedMessage.java   | 121
> >> +++++++++++++++++++
> >>  .../cxf/tracing/brave/soap/TraceFeature.java    |  50 ++++++++
> >>  .../tracing/brave/soap/TraceInInterceptor.java  |  58 +++++++++
> >>  .../tracing/brave/soap/TraceOutInterceptor.java |  57 +++++++++
> >>  .../cxf/tracing/brave/soap/BraveTraceTest.java  |  99 +++++++++++++++
> >>  .../brave/soap/LoggingSpanNameProvider.java     |  31 +++++
> >>  .../cxf/tracing/brave/soap/MyService.java       |  26 ++++
> >>  .../cxf/tracing/brave/soap/MyServiceImpl.java   |  28 +++++
> >>  13 files changed, 683 insertions(+)
> >> ----------------------------------------------------------------------
> >>
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/pom.xml
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/pom.xml b/rt/features/pom.xml
> >> index 0365bf6..a4cfdff 100644
> >> --- a/rt/features/pom.xml
> >> +++ b/rt/features/pom.xml
> >> @@ -34,5 +34,6 @@
> >>          <module>logging</module>
> >>          <module>metrics</module>
> >>          <module>throttling</module>
> >> +        <module>tracing-brave</module>
> >>      </modules>
> >>  </project>
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/pom.xml
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/pom.xml
> >> b/rt/features/tracing-brave/pom.xml
> >> new file mode 100644
> >> index 0000000..9af22e4
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/pom.xml
> >> @@ -0,0 +1,87 @@
> >> +<?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://mav
> >> en.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd";>
> >> +    <modelVersion>4.0.0</modelVersion>
> >> +    <artifactId>cxf-rt-features-tracing-brave</artifactId>
> >> +    <packaging>jar</packaging>
> >> +    <name>Apache CXF Tracing using Zipkin Brave</name>
> >> +    <url>http://cxf.apache.org</url>
> >> +    <parent>
> >> +        <groupId>org.apache.cxf</groupId>
> >> +        <artifactId>cxf-parent</artifactId>
> >> +        <version>3.2.0-SNAPSHOT</version>
> >> +        <relativePath>../../../parent/pom.xml</relativePath>
> >> +    </parent>
> >> +
> >> +    <properties>
> >> +        <cxf.osgi.export>
> >> +            org.apache.cxf.tracing.brave.soap
> >> +        </cxf.osgi.export>
> >> +        <brave.version>3.15.1</brave.version>
> >> +    </properties>
> >> +
> >> +    <dependencies>
> >> +        <dependency>
> >> +            <groupId>junit</groupId>
> >> +            <artifactId>junit</artifactId>
> >> +            <scope>test</scope>
> >> +        </dependency>
> >> +        <dependency>
> >> +            <groupId>org.apache.cxf</groupId>
> >> +            <artifactId>cxf-core</artifactId>
> >> +            <version>${project.version}</version>
> >> +        </dependency>
> >> +
> >> +        <dependency>
> >> +            <groupId>org.apache.cxf</groupId>
> >> +            <artifactId>cxf-rt-features-logging</artifactId>
> >> +            <version>${project.version}</version>
> >> +        </dependency>
> >> +        <dependency>
> >> +               <groupId>io.zipkin.brave</groupId>
> >> +               <artifactId>brave-core</artifactId>
> >> +               <version>${brave.version}</version>
> >> +        </dependency>
> >> +        <dependency>
> >> +               <groupId>io.zipkin.brave</groupId>
> >> +               <artifactId>brave-http</artifactId>
> >> +               <version>${brave.version}</version>
> >> +        </dependency>
> >> +
> >> +
> >> +        <dependency>
> >> +            <groupId>org.slf4j</groupId>
> >> +            <artifactId>slf4j-jdk14</artifactId>
> >> +            <scope>test</scope>
> >> +        </dependency>
> >> +        <dependency>
> >> +            <groupId>org.apache.cxf</groupId>
> >> +            <artifactId>cxf-rt-transports-http-jetty</artifactId>
> >> +            <version>${project.version}</version>
> >> +            <scope>test</scope>
> >> +        </dependency>
> >> +        <dependency>
> >> +            <groupId>org.apache.cxf</groupId>
> >> +            <artifactId>cxf-rt-frontend-jaxws</artifactId>
> >> +            <version>${project.version}</version>
> >> +            <scope>test</scope>
> >> +        </dependency>
> >> +    </dependencies>
> >> +</project>
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/src/main/java/org/apache/cxf/tracing/
> >> brave/soap/CxfHttpClientRequest.java
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/CxfHttpClientRequest.java
> b/rt/features/tracing-brave/sr
> >> c/main/java/org/apache/cxf/tracing/brave/soap/CxfHttpClientRequest.java
> >> new file mode 100644
> >> index 0000000..78a40fd
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/CxfHttpClientRequest.java
> >> @@ -0,0 +1,49 @@
> >> +/**
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements. See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership. The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License. You may obtain a copy of the License at
> >> + *
> >> + * http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied. See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +package org.apache.cxf.tracing.brave.soap;
> >> +
> >> +import java.net.URI;
> >> +
> >> +import com.github.kristofa.brave.http.HttpClientRequest;
> >> +import org.apache.cxf.message.Message;
> >> +
> >> +public class CxfHttpClientRequest implements HttpClientRequest {
> >> +
> >> +    private ParsedMessage message;
> >> +
> >> +    public CxfHttpClientRequest(Message message) {
> >> +        this.message = new ParsedMessage(message);
> >> +    }
> >> +
> >> +    @Override
> >> +    public URI getUri() {
> >> +        return message.getUri();
> >> +    }
> >> +
> >> +    @Override
> >> +    public String getHttpMethod() {
> >> +        return message.getHttpMethod();
> >> +    }
> >> +
> >> +    @Override
> >> +    public void addHeader(String header, String value) {
> >> +        message.addHeader(header, value);
> >> +    }
> >> +
> >> +}
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/src/main/java/org/apache/cxf/tracing/
> >> brave/soap/CxfServerRequest.java
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/CxfServerRequest.java b/rt/features/tracing-brave/sr
> >> c/main/java/org/apache/cxf/tracing/brave/soap/CxfServerRequest.java
> >> new file mode 100644
> >> index 0000000..fcc8797
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/CxfServerRequest.java
> >> @@ -0,0 +1,48 @@
> >> +/**
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements. See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership. The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License. You may obtain a copy of the License at
> >> + *
> >> + * http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied. See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +package org.apache.cxf.tracing.brave.soap;
> >> +
> >> +import java.net.URI;
> >> +
> >> +import com.github.kristofa.brave.http.HttpServerRequest;
> >> +
> >> +public class CxfServerRequest implements HttpServerRequest {
> >> +
> >> +    private ParsedMessage message;
> >> +
> >> +    public CxfServerRequest(ParsedMessage message) {
> >> +        this.message = message;
> >> +    }
> >> +
> >> +    @Override
> >> +    public URI getUri() {
> >> +        return message.getUri();
> >> +    }
> >> +
> >> +    @Override
> >> +    public String getHttpMethod() {
> >> +        return message.getHttpMethod();
> >> +    }
> >> +
> >> +    @Override
> >> +    public String getHttpHeaderValue(String headerName) {
> >> +        return message.getHeaders().get(headerName);
> >> +    }
> >> +
> >> +}
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/src/main/java/org/apache/cxf/tracing/
> >> brave/soap/HttpResponse200.java
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/HttpResponse200.java b/rt/features/tracing-brave/sr
> >> c/main/java/org/apache/cxf/tracing/brave/soap/HttpResponse200.java
> >> new file mode 100644
> >> index 0000000..f50dbde
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/HttpResponse200.java
> >> @@ -0,0 +1,28 @@
> >> +/**
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements. See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership. The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License. You may obtain a copy of the License at
> >> + *
> >> + * http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied. See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +package org.apache.cxf.tracing.brave.soap;
> >> +
> >> +import com.github.kristofa.brave.http.HttpResponse;
> >> +
> >> +final class HttpResponse200 implements HttpResponse {
> >> +    @Override
> >> +    public int getHttpStatusCode() {
> >> +        return 200;
> >> +    }
> >> +}
> >> \ No newline at end of file
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/src/main/java/org/apache/cxf/tracing/
> >> brave/soap/ParsedMessage.java
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/ParsedMessage.java b/rt/features/tracing-brave/sr
> >> c/main/java/org/apache/cxf/tracing/brave/soap/ParsedMessage.java
> >> new file mode 100644
> >> index 0000000..8967375
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/ParsedMessage.java
> >> @@ -0,0 +1,121 @@
> >> +/**
> >> + * 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.tracing.brave.soap;
> >> +
> >> +import java.net.URI;
> >> +import java.net.URISyntaxException;
> >> +import java.util.Arrays;
> >> +import java.util.HashMap;
> >> +import java.util.List;
> >> +import java.util.Map;
> >> +
> >> +import org.apache.cxf.helpers.CastUtils;
> >> +import org.apache.cxf.message.Message;
> >> +import org.apache.cxf.message.MessageUtils;
> >> +
> >> +public class ParsedMessage {
> >> +
> >> +    private Message message;
> >> +
> >> +    public ParsedMessage(Message message) {
> >> +        this.message = message;
> >> +    }
> >> +
> >> +    String safeGet(String key) {
> >> +        if (!message.containsKey(key)) {
> >> +            return null;
> >> +        }
> >> +        Object value = message.get(key);
> >> +        return (value instanceof String) ? value.toString() : null;
> >> +    }
> >> +
> >> +    public String getUriSt() {
> >> +        String uri = safeGet(Message.REQUEST_URL);
> >> +        if (uri == null) {
> >> +            String address = safeGet(Message.ENDPOINT_ADDRESS);
> >> +            uri = safeGet(Message.REQUEST_URI);
> >> +            if (uri != null && uri.startsWith("/")) {
> >> +                if (address != null && !address.startsWith(uri)) {
> >> +                    if (address.endsWith("/") && address.length() > 1)
> {
> >> +                        address = address.substring(0,
> address.length());
> >> +                    }
> >> +                    uri = address + uri;
> >> +                }
> >> +            } else {
> >> +                uri = address;
> >> +            }
> >> +        }
> >> +        String query = safeGet(Message.QUERY_STRING);
> >> +        if (query != null) {
> >> +            return uri + "?" + query;
> >> +        } else {
> >> +            return uri;
> >> +        }
> >> +    }
> >> +
> >> +    public URI getUri() {
> >> +        try {
> >> +            String uriSt = getUriSt();
> >> +            return uriSt != null ? new URI(uriSt) : new URI("");
> >> +        } catch (URISyntaxException e) {
> >> +            throw new RuntimeException(e.getMessage(), e);
> >> +        }
> >> +    }
> >> +
> >> +    Message getEffectiveMessage() {
> >> +        boolean isRequestor = MessageUtils.isRequestor(message);
> >> +        boolean isOutbound = MessageUtils.isOutbound(message);
> >> +        if (isRequestor) {
> >> +            return isOutbound ? message :
> message.getExchange().getOutMe
> >> ssage();
> >> +        } else {
> >> +            return isOutbound ? message.getExchange().getInMessage() :
> >> message;
> >> +        }
> >> +    }
> >> +
> >> +    Map<String, String> getHeaders() {
> >> +        Map<String, List<String>> headers = CastUtils.cast((Map<?,
> >> ?>)message.get(Message.PROTOCOL_HEADERS));
> >> +        Map<String, String> result = new HashMap<>();
> >> +        if (headers == null) {
> >> +            return result;
> >> +        }
> >> +        for (Map.Entry<String, List<String>> entry :
> headers.entrySet())
> >> {
> >> +            if (entry.getValue().size() == 1) {
> >> +                result.put(entry.getKey(), entry.getValue().get(0));
> >> +            } else {
> >> +                String[] valueAr = entry.getValue().toArray(new
> String[]
> >> {});
> >> +                result.put(entry.getKey(), valueAr.toString());
> >> +            }
> >> +        }
> >> +        return result;
> >> +    }
> >> +
> >> +    void addHeader(String key, String value) {
> >> +        Map<String, List<String>> headers = CastUtils.cast((Map<?,
> >> ?>)message.get(Message.PROTOCOL_HEADERS));
> >> +        if (headers == null) {
> >> +            headers = new HashMap<String, List<String>>();
> >> +            message.put(Message.PROTOCOL_HEADERS, headers);
> >> +        }
> >> +        headers.put(key, Arrays.asList(value));
> >> +    }
> >> +
> >> +    public String getHttpMethod() {
> >> +        ParsedMessage eMessage = new ParsedMessage(getEffectiveMess
> >> age());
> >> +        return eMessage.safeGet(Message.HTTP_REQUEST_METHOD);
> >> +    }
> >> +}
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/src/main/java/org/apache/cxf/tracing/
> >> brave/soap/TraceFeature.java
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/TraceFeature.java b/rt/features/tracing-brave/sr
> >> c/main/java/org/apache/cxf/tracing/brave/soap/TraceFeature.java
> >> new file mode 100644
> >> index 0000000..fbaca07
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/TraceFeature.java
> >> @@ -0,0 +1,50 @@
> >> +/**
> >> + * 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.tracing.brave.soap;
> >> +
> >> +import com.github.kristofa.brave.Brave;
> >> +import com.github.kristofa.brave.http.DefaultSpanNameProvider;
> >> +import org.apache.cxf.Bus;
> >> +import org.apache.cxf.annotations.Provider;
> >> +import org.apache.cxf.annotations.Provider.Type;
> >> +import org.apache.cxf.common.injection.NoJSR250Annotations;
> >> +import org.apache.cxf.feature.AbstractFeature;
> >> +import org.apache.cxf.interceptor.InterceptorProvider;
> >> +
> >> +@NoJSR250Annotations
> >> +@Provider(value = Type.Feature)
> >> +public class TraceFeature extends AbstractFeature {
> >> +    private TraceInInterceptor in;
> >> +    private TraceOutInterceptor out;
> >> +
> >> +    public TraceFeature(Brave brave) {
> >> +        DefaultSpanNameProvider nameProvider = new
> >> DefaultSpanNameProvider();
> >> +        in = new TraceInInterceptor(brave, nameProvider);
> >> +        out = new TraceOutInterceptor(brave, nameProvider);
> >> +    }
> >> +
> >> +    @Override
> >> +    protected void initializeProvider(InterceptorProvider provider,
> Bus
> >> bus) {
> >> +        provider.getInInterceptors().add(in);
> >> +        provider.getInFaultInterceptors().add(in);
> >> +
> >> +        provider.getOutInterceptors().add(out);
> >> +        provider.getOutFaultInterceptors().add(out);
> >> +    }
> >> +}
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/src/main/java/org/apache/cxf/tracing/
> >> brave/soap/TraceInInterceptor.java
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/TraceInInterceptor.java b/rt/features/tracing-brave/sr
> >> c/main/java/org/apache/cxf/tracing/brave/soap/TraceInInterceptor.java
> >> new file mode 100644
> >> index 0000000..4b84eb3
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/TraceInInterceptor.java
> >> @@ -0,0 +1,58 @@
> >> +/**
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements. See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership. The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License. You may obtain a copy of the License at
> >> + *
> >> + * http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied. See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +package org.apache.cxf.tracing.brave.soap;
> >> +
> >> +import com.github.kristofa.brave.Brave;
> >> +import com.github.kristofa.brave.http.HttpClientResponseAdapter;
> >> +import com.github.kristofa.brave.http.HttpServerRequestAdapter;
> >> +import com.github.kristofa.brave.http.SpanNameProvider;
> >> +import org.apache.cxf.common.injection.NoJSR250Annotations;
> >> +import org.apache.cxf.interceptor.Fault;
> >> +import org.apache.cxf.message.Message;
> >> +import org.apache.cxf.message.MessageUtils;
> >> +import org.apache.cxf.phase.AbstractPhaseInterceptor;
> >> +import org.apache.cxf.phase.Phase;
> >> +
> >> +/**
> >> + *
> >> + */
> >> +@NoJSR250Annotations
> >> +public class TraceInInterceptor extends AbstractPhaseInterceptor<
> Message>
> >> {
> >> +
> >> +    private Brave brave;
> >> +    private SpanNameProvider spanNameProvider;
> >> +
> >> +    public TraceInInterceptor(Brave brave, SpanNameProvider
> >> spanNameProvider) {
> >> +        super(Phase.PRE_INVOKE);
> >> +        this.brave = brave;
> >> +        this.spanNameProvider = spanNameProvider;
> >> +    }
> >> +
> >> +    public void handleMessage(Message cxfMessage) throws Fault {
> >> +        ParsedMessage message = new ParsedMessage(cxfMessage);
> >> +        if (MessageUtils.isRequestor(cxfMessage)) {
> >> +            brave.clientResponseInterceptor().handle(new
> >> HttpClientResponseAdapter(new HttpResponse200()));
> >> +        } else {
> >> +            HttpServerRequestAdapter adapter =
> >> +                new HttpServerRequestAdapter(new
> >> CxfServerRequest(message), spanNameProvider);
> >> +            brave.serverRequestInterceptor().handle(adapter);
> >> +        }
> >> +    }
> >> +
> >> +}
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/src/main/java/org/apache/cxf/tracing/
> >> brave/soap/TraceOutInterceptor.java
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/TraceOutInterceptor.java b/rt/features/tracing-brave/sr
> >> c/main/java/org/apache/cxf/tracing/brave/soap/TraceOutInterceptor.java
> >> new file mode 100644
> >> index 0000000..17f76d0
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/src/main/java/org/apache/cxf/tra
> >> cing/brave/soap/TraceOutInterceptor.java
> >> @@ -0,0 +1,57 @@
> >> +/**
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements. See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership. The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License. You may obtain a copy of the License at
> >> + *
> >> + * http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied. See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +package org.apache.cxf.tracing.brave.soap;
> >> +
> >> +import com.github.kristofa.brave.Brave;
> >> +import com.github.kristofa.brave.http.HttpClientRequest;
> >> +import com.github.kristofa.brave.http.HttpClientRequestAdapter;
> >> +import com.github.kristofa.brave.http.HttpServerResponseAdapter;
> >> +import com.github.kristofa.brave.http.SpanNameProvider;
> >> +import org.apache.cxf.common.injection.NoJSR250Annotations;
> >> +import org.apache.cxf.interceptor.Fault;
> >> +import org.apache.cxf.message.Message;
> >> +import org.apache.cxf.message.MessageUtils;
> >> +import org.apache.cxf.phase.AbstractPhaseInterceptor;
> >> +import org.apache.cxf.phase.Phase;
> >> +
> >> +/**
> >> + *
> >> + */
> >> +@NoJSR250Annotations
> >> +public class TraceOutInterceptor extends AbstractPhaseInterceptor<
> Message>
> >> {
> >> +
> >> +    private Brave brave;
> >> +    private SpanNameProvider spanNameProvider;
> >> +
> >> +    public TraceOutInterceptor(Brave brave, SpanNameProvider
> >> spanNameProvider) {
> >> +        super(Phase.PRE_PROTOCOL);
> >> +        this.brave = brave;
> >> +        this.spanNameProvider = spanNameProvider;
> >> +    }
> >> +
> >> +    public void handleMessage(Message message) throws Fault {
> >> +        if (MessageUtils.isRequestor(message)) {
> >> +            final HttpClientRequest req = new
> >> CxfHttpClientRequest(message);
> >> +            brave.clientRequestInterceptor().handle(new
> >> HttpClientRequestAdapter(req, spanNameProvider));
> >> +        } else {
> >> +            brave.serverResponseInterceptor().handle(new
> >> HttpServerResponseAdapter(new HttpResponse200()));
> >> +        }
> >> +    }
> >> +
> >> +}
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/src/test/java/org/apache/cxf/tracing/
> >> brave/soap/BraveTraceTest.java
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/src/test/java/org/apache/cxf/tra
> >> cing/brave/soap/BraveTraceTest.java b/rt/features/tracing-brave/sr
> >> c/test/java/org/apache/cxf/tracing/brave/soap/BraveTraceTest.java
> >> new file mode 100644
> >> index 0000000..5bac5f7
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/src/test/java/org/apache/cxf/tra
> >> cing/brave/soap/BraveTraceTest.java
> >> @@ -0,0 +1,99 @@
> >> +/**
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements. See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership. The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License. You may obtain a copy of the License at
> >> + *
> >> + * http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied. See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +package org.apache.cxf.tracing.brave.soap;
> >> +
> >> +import java.util.ArrayList;
> >> +import java.util.Arrays;
> >> +import java.util.List;
> >> +
> >> +import com.github.kristofa.brave.Brave;
> >> +import org.apache.cxf.endpoint.Server;
> >> +import org.apache.cxf.ext.logging.LoggingFeature;
> >> +import org.apache.cxf.feature.Feature;
> >> +import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
> >> +import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
> >> +import org.junit.After;
> >> +import org.junit.Assert;
> >> +import org.junit.Before;
> >> +import org.junit.Test;
> >> +import zipkin.Span;
> >> +import zipkin.reporter.Reporter;
> >> +
> >> +public class BraveTraceTest {
> >> +
> >> +    private static final String ADDRESS = "http://localhost:8182";;
> >> +    private Server server;
> >> +    private TraceFeature logging;
> >> +    private Localreporter localReporter;
> >> +
> >> +    @Before
> >> +    public void startServer() {
> >> +        localReporter = new Localreporter();
> >> +        logging = createLoggingFeature(localReporter);
> >> +        server = createServer(logging);
> >> +    }
> >> +
> >> +    @Test
> >> +    public void testMyService() {
> >> +        MyService myService = createProxy(logging);
> >> +        myService.echo("test");
> >> +        for (Span span : localReporter.spans) {
> >> +            System.out.println(span);
> >> +        }
> >> +        Assert.assertEquals(2, localReporter.spans.size());
> >> +
> >> +    }
> >> +
> >> +    @After
> >> +    public void stopServer() {
> >> +        server.destroy();
> >> +    }
> >> +
> >> +    private static Server createServer(Feature logging) {
> >> +        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
> >> +        factory.setAddress(ADDRESS);
> >> +        factory.setServiceBean(new MyServiceImpl());
> >> +        factory.setFeatures(Arrays.asList(logging));
> >> +        return factory.create();
> >> +    }
> >> +
> >> +    private static MyService createProxy(Feature trace) {
> >> +        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
> >> +        factory.setServiceClass(MyService.class);
> >> +        factory.setAddress(ADDRESS);
> >> +        factory.setFeatures(Arrays.asList(trace, new
> LoggingFeature()));
> >> +        return (MyService)factory.create();
> >> +    }
> >> +
> >> +    private static TraceFeature createLoggingFeature(Reporter<Span>
> >> reporter) {
> >> +        Brave brave = new Brave.Builder("myservice").rep
> >> orter(reporter).build();
> >> +        return new TraceFeature(brave);
> >> +    }
> >> +
> >> +    static final class Localreporter implements Reporter<Span> {
> >> +        List<Span> spans = new ArrayList<Span>();
> >> +
> >> +        @Override
> >> +        public void report(Span span) {
> >> +            spans.add(span);
> >> +        }
> >> +
> >> +    }
> >> +
> >> +}
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/src/test/java/org/apache/cxf/tracing/
> >> brave/soap/LoggingSpanNameProvider.java
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/src/test/java/org/apache/cxf/tra
> >> cing/brave/soap/LoggingSpanNameProvider.java
> >> b/rt/features/tracing-brave/src/test/java/org/apache/cxf/tra
> >> cing/brave/soap/LoggingSpanNameProvider.java
> >> new file mode 100644
> >> index 0000000..86fa25a
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/src/test/java/org/apache/cxf/tra
> >> cing/brave/soap/LoggingSpanNameProvider.java
> >> @@ -0,0 +1,31 @@
> >> +/**
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements. See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership. The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License. You may obtain a copy of the License at
> >> + *
> >> + * http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied. See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +package org.apache.cxf.tracing.brave.soap;
> >> +
> >> +import com.github.kristofa.brave.http.HttpRequest;
> >> +import com.github.kristofa.brave.http.SpanNameProvider;
> >> +
> >> +public class LoggingSpanNameProvider implements SpanNameProvider {
> >> +
> >> +    @Override
> >> +    public String spanName(HttpRequest request) {
> >> +        return (request instanceof SpanNameProvider) ?
> >> ((SpanNameProvider)request).spanName(request) : "";
> >> +    }
> >> +
> >> +}
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/src/test/java/org/apache/cxf/tracing/
> >> brave/soap/MyService.java
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/src/test/java/org/apache/cxf/
> tracing/brave/soap/MyService.java
> >> b/rt/features/tracing-brave/src/test/java/org/apache/cxf/tra
> >> cing/brave/soap/MyService.java
> >> new file mode 100644
> >> index 0000000..2001164
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/src/test/java/org/apache/cxf/tra
> >> cing/brave/soap/MyService.java
> >> @@ -0,0 +1,26 @@
> >> +/**
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements. See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership. The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License. You may obtain a copy of the License at
> >> + *
> >> + * http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied. See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +package org.apache.cxf.tracing.brave.soap;
> >> +
> >> +import javax.jws.WebService;
> >> +
> >> +@WebService
> >> +public interface MyService {
> >> +    String echo(String msg);
> >> +}
> >>
> >> http://git-wip-us.apache.org/repos/asf/cxf/blob/fd77d3f3/rt/
> >> features/tracing-brave/src/test/java/org/apache/cxf/tracing/
> >> brave/soap/MyServiceImpl.java
> >> ----------------------------------------------------------------------
> >> diff --git a/rt/features/tracing-brave/src/test/java/org/apache/cxf/tra
> >> cing/brave/soap/MyServiceImpl.java b/rt/features/tracing-brave/sr
> >> c/test/java/org/apache/cxf/tracing/brave/soap/MyServiceImpl.java
> >> new file mode 100644
> >> index 0000000..e9f901a
> >> --- /dev/null
> >> +++ b/rt/features/tracing-brave/src/test/java/org/apache/cxf/tra
> >> cing/brave/soap/MyServiceImpl.java
> >> @@ -0,0 +1,28 @@
> >> +/**
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements. See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership. The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License. You may obtain a copy of the License at
> >> + *
> >> + * http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied. See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +package org.apache.cxf.tracing.brave.soap;
> >> +
> >> +public class MyServiceImpl implements MyService {
> >> +
> >> +    @Override
> >> +    public String echo(String msg) {
> >> +        return msg;
> >> +    }
> >> +
> >> +}
> >>
> >>
> >
> > --
> > Sergey Beryozkin
> >
> > Talend Community Coders
> > http://coders.talend.com/
> >
> >
>
>
> --
> --
> Christian Schneider
> http://www.liquid-reality.de
> <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e
> 46&URL=http%3a%2f%2fwww.liquid-reality.de>
>
> Open Source Architect
> http://www.talend.com
> <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e
> 46&URL=http%3a%2f%2fwww.talend.com>
>

Reply via email to