cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Schneider <ch...@die-schneider.net>
Subject Re: cxf git commit: [CXF-7164] Support tracing using Zipkin Brave
Date Tue, 06 Dec 2016 18:09:33 GMT
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 <sberyozkin@gmail.com>:

> 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, cschneider@apache.org 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 <chris@die-schneider.net>
>> Authored: Tue Dec 6 14:35:35 2016 +0100
>> Committer: Christian Schneider <chris@die-schneider.net>
>> 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=3aa4083e0c744ae1ba52bd062c5a7e46&URL=http%3a%2f%2fwww.liquid-reality.de>

Open Source Architect
http://www.talend.com
<https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e46&URL=http%3a%2f%2fwww.talend.com>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message