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>
>