diff --git a/edexOsgi/build.edex/edex/common.properties b/edexOsgi/build.edex/edex/common.properties index 8f818c6f25..735e3693d4 100644 --- a/edexOsgi/build.edex/edex/common.properties +++ b/edexOsgi/build.edex/edex/common.properties @@ -4,7 +4,7 @@ architecture=x86_64 includegen.filter=raytheon|noaa\.nws|noaa\.gsd # AWIPSII core repositores required for build -core.repositories=ufcore,ufcore-foss +core.repositories=ufcore,ufcore-foss,AWIPS2_foss # Note: currently, there is a limit of 99 plugin directories. dir.01=cave diff --git a/edexOsgi/com.raytheon.uf.edex.cots.feature/feature.xml b/edexOsgi/com.raytheon.uf.edex.cots.feature/feature.xml index a851809667..c1c3303419 100644 --- a/edexOsgi/com.raytheon.uf.edex.cots.feature/feature.xml +++ b/edexOsgi/com.raytheon.uf.edex.cots.feature/feature.xml @@ -102,4 +102,10 @@ install-size="0" version="0.0.0"/> + + diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.core.feature/feature.xml b/edexOsgi/com.raytheon.uf.edex.datadelivery.core.feature/feature.xml index 39a7af36bd..eeae838829 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.core.feature/feature.xml +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.core.feature/feature.xml @@ -137,4 +137,11 @@ version="0.0.0" unpack="false"/> + + diff --git a/edexOsgi/com.raytheon.uf.edex.ogc.common/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.edex.ogc.common/META-INF/MANIFEST.MF index 6e8f451efd..1baf89db9c 100644 --- a/edexOsgi/com.raytheon.uf.edex.ogc.common/META-INF/MANIFEST.MF +++ b/edexOsgi/com.raytheon.uf.edex.ogc.common/META-INF/MANIFEST.MF @@ -23,7 +23,8 @@ Require-Bundle: net.opengis;bundle-version="1.0.2", org.eclipse.jetty;bundle-version="7.6.9", com.raytheon.uf.common.dataplugin.level;bundle-version="1.12.1174", com.raytheon.uf.edex.log;bundle-version="1.12.1174", - com.raytheon.uf.common.http + com.raytheon.uf.common.http, + com.raytheon.uf.edex.soap;bundle-version="1.14.0" Export-Package: com.raytheon.uf.edex.ogc.common, com.raytheon.uf.edex.ogc.common.db, com.raytheon.uf.edex.ogc.common.feature, diff --git a/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/http/OgcHttpEndpoint.java b/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/http/OgcHttpEndpoint.java index 4a7a4e6e3c..37e9926d9e 100644 --- a/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/http/OgcHttpEndpoint.java +++ b/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/http/OgcHttpEndpoint.java @@ -31,11 +31,11 @@ import org.apache.camel.Processor; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.edex.log.cxf.RequestLogController; import com.raytheon.uf.edex.ogc.common.stats.IStatsRecorder; import com.raytheon.uf.edex.ogc.common.stats.OperationType; import com.raytheon.uf.edex.ogc.common.stats.ServiceType; import com.raytheon.uf.edex.ogc.common.stats.StatsRecorderFinder; +import com.raytheon.uf.edex.soap.RequestLogController; /** * HTTP Camel Processor for OGC REST Services diff --git a/edexOsgi/com.raytheon.uf.edex.soap/.classpath b/edexOsgi/com.raytheon.uf.edex.soap/.classpath new file mode 100644 index 0000000000..098194ca4b --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.soap/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/edexOsgi/com.raytheon.uf.edex.soap/.project b/edexOsgi/com.raytheon.uf.edex.soap/.project new file mode 100644 index 0000000000..b5a2a5b80f --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.soap/.project @@ -0,0 +1,28 @@ + + + com.raytheon.uf.edex.soap + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/edexOsgi/com.raytheon.uf.edex.soap/.settings/org.eclipse.jdt.core.prefs b/edexOsgi/com.raytheon.uf.edex.soap/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..f42de363af --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.soap/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/edexOsgi/com.raytheon.uf.edex.soap/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.edex.soap/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..cd3b92691c --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.soap/META-INF/MANIFEST.MF @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: EDEX Soap +Bundle-SymbolicName: com.raytheon.uf.edex.soap +Bundle-Version: 1.14.0.qualifier +Bundle-Vendor: RAYTHEON +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Require-Bundle: org.apache.commons.cxf;bundle-version="2.5.10", + com.raytheon.uf.common.status;bundle-version="1.12.1174", + com.sun.xml.bind;bundle-version="1.0.0" +Export-Package: com.raytheon.uf.edex.soap diff --git a/edexOsgi/com.raytheon.uf.edex.soap/build.properties b/edexOsgi/com.raytheon.uf.edex.soap/build.properties new file mode 100644 index 0000000000..34d2e4d2da --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.soap/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/CXFLogger.java b/edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/CXFLogger.java new file mode 100644 index 0000000000..a055c4fc45 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/CXFLogger.java @@ -0,0 +1,153 @@ +/** + * Copyright 09/24/12 Raytheon Company. + * + * Unlimited Rights + * This software was developed pursuant to Contract Number + * DTFAWA-10-D-00028 with the US Government. The US Government’s rights + * in and to this copyrighted software are as specified in DFARS + * 252.227-7014 which was made part of the above contract. + */ +package com.raytheon.uf.edex.soap; + +import java.io.InputStream; + +import org.apache.cxf.helpers.IOUtils; +import org.apache.cxf.interceptor.Fault; +import org.apache.cxf.interceptor.LoggingMessage; +import org.apache.cxf.io.CachedOutputStream; +import org.apache.cxf.io.DelegatingInputStream; +import org.apache.cxf.message.Message; + +import com.raytheon.uf.common.status.IUFStatusHandler; +import com.raytheon.uf.common.status.UFStatus; + + +/** + * Web Services interceptor that logs incoming requests + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * September, 2013         behemmi     Initial creation
+ * May 23, 2014 3199       bclement    moved to edex.soap from edex.log
+ * 
+ * 
+ * + * @author behemmi + * @version 1.0 + */ +public class CXFLogger extends org.apache.cxf.interceptor.LoggingInInterceptor { + + protected IUFStatusHandler log = UFStatus.getHandler(this.getClass()); + + @Override + public void handleMessage(Message message) throws Fault { + if (writer != null || + RequestLogController.getInstance().shouldLogRequestsInfo() && + log.isPriorityEnabled(RequestLogController.getInstance().getRequestLogLevel())) { + logging(message); + } + } + + /** + * implement custom content for incoming requests in our own log format + * @param message + * @throws Fault + */ + protected void logging(Message message) throws Fault { + if (message.containsKey(LoggingMessage.ID_KEY)) { + return; + } + String id = (String)message.getExchange().get(LoggingMessage.ID_KEY); + if (id == null) { + id = LoggingMessage.nextId(); + message.getExchange().put(LoggingMessage.ID_KEY, id); + } + message.put(LoggingMessage.ID_KEY, id); + final LoggingMessage buffer + = new LoggingMessage("Inbound Message\n--------------------------", id); + + Integer responseCode = (Integer)message.get(Message.RESPONSE_CODE); + if (responseCode != null) { + buffer.getResponseCode().append(responseCode); + } + + String encoding = (String)message.get(Message.ENCODING); + + if (encoding != null) { + buffer.getEncoding().append(encoding); + } + String httpMethod = (String)message.get(Message.HTTP_REQUEST_METHOD); + if (httpMethod != null) { + buffer.getHttpMethod().append(httpMethod); + } + String ct = (String)message.get(Message.CONTENT_TYPE); + if (ct != null) { + buffer.getContentType().append(ct); + } + Object headers = message.get(Message.PROTOCOL_HEADERS); + + if (headers != null) { + buffer.getHeader().append(headers); + } + String uri = (String)message.get(Message.REQUEST_URL); + if (uri != null) { + buffer.getAddress().append(uri); + String query = (String)message.get(Message.QUERY_STRING); + if (query != null) { + buffer.getAddress().append("?").append(query); + } + } + + if (!isShowBinaryContent() && isBinaryContent(ct)) { + buffer.getMessage().append(BINARY_CONTENT_MESSAGE).append('\n'); + log.handle(RequestLogController.getInstance().getRequestLogLevel(), + buffer.toString()); + return; + } + + InputStream is = message.getContent(InputStream.class); + if (is != null) { + CachedOutputStream bos = new CachedOutputStream(); + if (threshold > 0) { + bos.setThreshold(threshold); + } + try { + // use the appropriate input stream and restore it later + InputStream bis = is instanceof DelegatingInputStream + ? ((DelegatingInputStream)is).getInputStream() : is; + + IOUtils.copyAndCloseInput(bis, bos); + bos.flush(); + bis = bos.getInputStream(); + + // restore the delegating input stream or the input stream + if (is instanceof DelegatingInputStream) { + ((DelegatingInputStream)is).setInputStream(bis); + } else { + message.setContent(InputStream.class, bis); + } + + if (bos.getTempFile() != null) { + //large thing on disk... + buffer.getMessage().append("\nMessage (saved to tmp file):\n"); + buffer.getMessage().append("Filename: " + bos.getTempFile().getAbsolutePath() + "\n"); + } + if (bos.size() > limit) { + buffer.getMessage().append("(message truncated to " + limit + " bytes)\n"); + } + writePayload(buffer.getPayload(), bos, encoding, ct); + + bos.close(); + } catch (Exception e) { + throw new Fault(e); + } + } + log.handle(RequestLogController.getInstance().getRequestLogLevel(), + buffer.toString()); + } + +} diff --git a/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/soap/CustomWsdlInterceptor.java b/edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/CustomWsdlInterceptor.java similarity index 97% rename from edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/soap/CustomWsdlInterceptor.java rename to edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/CustomWsdlInterceptor.java index 501af5428e..bbc31b088e 100644 --- a/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/soap/CustomWsdlInterceptor.java +++ b/edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/CustomWsdlInterceptor.java @@ -7,7 +7,7 @@ * in and to this copyrighted software are as specified in DFARS * 252.227-7014 which was made part of the above contract. */ -package com.raytheon.uf.edex.ogc.common.soap; +package com.raytheon.uf.edex.soap; import java.io.IOException; import java.io.InputStream; @@ -41,6 +41,7 @@ import com.raytheon.uf.common.status.UFStatus; * ------------ ---------- ----------- -------------------------- * Jan 28, 2013 bclement Initial creation * 5/2/2014 #3192 bhillip Minor fix for CXF upgrade to 2.7.10 + * May 23, 2014 3199 bclement moved to edex.soap from edex.ogc.common * * * diff --git a/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/soap/JaxWsConfigServerFactoryBean.java b/edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/JaxWsConfigServerFactoryBean.java similarity index 97% rename from edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/soap/JaxWsConfigServerFactoryBean.java rename to edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/JaxWsConfigServerFactoryBean.java index a6831fff94..dec9a1b53b 100644 --- a/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/soap/JaxWsConfigServerFactoryBean.java +++ b/edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/JaxWsConfigServerFactoryBean.java @@ -7,7 +7,7 @@ * in and to this copyrighted software are as specified in DFARS * 252.227-7014 which was made part of the above contract. */ -package com.raytheon.uf.edex.ogc.common.soap; +package com.raytheon.uf.edex.soap; import java.util.Arrays; import java.util.HashMap; @@ -34,6 +34,7 @@ import com.sun.xml.bind.v2.model.annotation.RuntimeAnnotationReader; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Nov 21, 2012 bclement Initial creation + * May 23, 2014 3199 bclement moved to edex.soap from edex.ogc.common * * * diff --git a/edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/RequestLogController.java b/edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/RequestLogController.java new file mode 100644 index 0000000000..6f4aed4a91 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.soap/src/com/raytheon/uf/edex/soap/RequestLogController.java @@ -0,0 +1,75 @@ +/** + * Copyright 09/24/12 Raytheon Company. + * + * Unlimited Rights + * This software was developed pursuant to Contract Number + * DTFAWA-10-D-00028 with the US Government. The US Government’s rights + * in and to this copyrighted software are as specified in DFARS + * 252.227-7014 which was made part of the above contract. + */ +package com.raytheon.uf.edex.soap; + +import com.raytheon.uf.common.status.UFStatus.Priority; + +/** + * Singleton to control how incoming request information is logged. Implemented + * as a singleton to allow runtime control from a Web Client + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * September, 2013         behemmi     Initial creation
+ * May 23, 2014 3199       bclement    moved to edex.soap from edex.log
+ * 
+ * 
+ * + * @author behemmi + * @version 1.0 + */ +public class RequestLogController { + + private static RequestLogController instance = null; + + private Priority requestLogLevel; + private boolean shouldLogRequestsInfo; + + private RequestLogController(){ + requestLogLevel = Priority.DEBUG; + shouldLogRequestsInfo = true; + } + + public static RequestLogController getInstance() { + if(instance == null) { + instance = new RequestLogController(); + } + return instance; + } + + public Priority getRequestLogLevel() { + return requestLogLevel; + } + + public void setRequestLogLevel(Priority requestLogLevel) { + this.requestLogLevel = requestLogLevel; + } + + public boolean shouldLogRequestsInfo() { + return getShouldLogRequestsInfo(); + } + + /** + * Traditional getter for Jackson serialization. + * + * @return shouldLogRequestsInfo - if this logger is enabled + */ + public boolean getShouldLogRequestsInfo() { + return shouldLogRequestsInfo; + } + + public void setShouldLogRequestsInfo(boolean shouldLogRequestsInfo) { + this.shouldLogRequestsInfo = shouldLogRequestsInfo; + } +} diff --git a/edexOsgi/com.raytheon.uf.edex.wfs/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.edex.wfs/META-INF/MANIFEST.MF index 39d1159740..2ab77c5fbb 100644 --- a/edexOsgi/com.raytheon.uf.edex.wfs/META-INF/MANIFEST.MF +++ b/edexOsgi/com.raytheon.uf.edex.wfs/META-INF/MANIFEST.MF @@ -23,7 +23,8 @@ Require-Bundle: org.geotools;bundle-version="2.6.4", com.raytheon.uf.common.pointdata;bundle-version="1.12.1174", org.apache.commons.collections;bundle-version="3.2.0", org.apache.commons.cxf;bundle-version="1.0.0", - com.raytheon.uf.common.http + com.raytheon.uf.common.http, + com.raytheon.uf.edex.soap;bundle-version="1.14.0" Export-Package: com.raytheon.uf.edex.wfs, com.raytheon.uf.edex.wfs.feature, com.raytheon.uf.edex.wfs.filter, diff --git a/edexOsgi/com.raytheon.uf.edex.wfs/res/spring/wfs-ogc-soap-request.xml b/edexOsgi/com.raytheon.uf.edex.wfs/res/spring/wfs-ogc-soap-request.xml index dc7b1299f8..9d8bae257e 100644 --- a/edexOsgi/com.raytheon.uf.edex.wfs/res/spring/wfs-ogc-soap-request.xml +++ b/edexOsgi/com.raytheon.uf.edex.wfs/res/spring/wfs-ogc-soap-request.xml @@ -9,7 +9,7 @@ diff --git a/edexOsgi/com.raytheon.uf.edex.wfs/res/spring/wfs-ogc-soap-wsdl.xml b/edexOsgi/com.raytheon.uf.edex.wfs/res/spring/wfs-ogc-soap-wsdl.xml index 052d89cfa1..9e5cb37959 100644 --- a/edexOsgi/com.raytheon.uf.edex.wfs/res/spring/wfs-ogc-soap-wsdl.xml +++ b/edexOsgi/com.raytheon.uf.edex.wfs/res/spring/wfs-ogc-soap-wsdl.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> + class="com.raytheon.uf.edex.soap.CustomWsdlInterceptor"> diff --git a/edexOsgi/com.raytheon.uf.edex.wfs/src/com/raytheon/uf/edex/wfs/soap2_0_0/Wfs.java b/edexOsgi/com.raytheon.uf.edex.wfs/src/com/raytheon/uf/edex/wfs/soap2_0_0/Wfs.java index 834b218776..09d1543912 100644 --- a/edexOsgi/com.raytheon.uf.edex.wfs/src/com/raytheon/uf/edex/wfs/soap2_0_0/Wfs.java +++ b/edexOsgi/com.raytheon.uf.edex.wfs/src/com/raytheon/uf/edex/wfs/soap2_0_0/Wfs.java @@ -66,7 +66,7 @@ import com.raytheon.uf.edex.wfs.soap2_0_0.util.DescribeFeatureTypeResponseType; * @version 1.0 */ @GZIP -@InInterceptors(interceptors = "com.raytheon.uf.edex.log.cxf.CXFLogger") +@InInterceptors(interceptors = "com.raytheon.uf.edex.soap.CXFLogger") @WebService(name = "wfs", targetNamespace = "http://www.opengis.net/wfs/requests/2.0") @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) @BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING) diff --git a/edexOsgi/com.raytheon.uf.edex.wfs/src/com/raytheon/uf/edex/wfs/soap2_0_0/WfsImpl.java b/edexOsgi/com.raytheon.uf.edex.wfs/src/com/raytheon/uf/edex/wfs/soap2_0_0/WfsImpl.java index 65e64a97fe..68f7ce0e49 100644 --- a/edexOsgi/com.raytheon.uf.edex.wfs/src/com/raytheon/uf/edex/wfs/soap2_0_0/WfsImpl.java +++ b/edexOsgi/com.raytheon.uf.edex.wfs/src/com/raytheon/uf/edex/wfs/soap2_0_0/WfsImpl.java @@ -35,7 +35,6 @@ import net.opengis.wfs.v_2_0_0.WFSCapabilitiesType; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.edex.log.cxf.RequestLogController; import com.raytheon.uf.edex.ogc.common.http.EndpointInfo; import com.raytheon.uf.edex.ogc.common.soap.AbstractOwsService; import com.raytheon.uf.edex.ogc.common.soap.ServiceExceptionReport; @@ -43,6 +42,7 @@ import com.raytheon.uf.edex.ogc.common.stats.IStatsRecorder; import com.raytheon.uf.edex.ogc.common.stats.OperationType; import com.raytheon.uf.edex.ogc.common.stats.ServiceType; import com.raytheon.uf.edex.ogc.common.stats.StatsRecorderFinder; +import com.raytheon.uf.edex.soap.RequestLogController; import com.raytheon.uf.edex.wfs.WfsException; import com.raytheon.uf.edex.wfs.WfsException.Code; import com.raytheon.uf.edex.wfs.request.DescFeatureTypeReq;