first commit

pull/6/head
Frédérik Benoist 2023-11-16 00:39:20 +01:00
commit 2c0b705ab6
11 changed files with 886 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

42
.gitignore vendored Normal file
View File

@ -0,0 +1,42 @@
# Dossiers générés par l'IDE
.idea/
# Fichiers de configuration spécifiques à l'IDE
*.iml
*.iws
*.ipr
# Dossiers générés par Maven
target/
# Fichiers de configuration de Maven
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
release.properties
dependency-reduced-pom.xml
buildNumber.properties
# Fichiers générés par Tomcat
*.log
*.tmp
work/
temp/
logs/
# Dossiers spécifiques à Eclipse
.settings/
# Fichiers spécifiques à Eclipse
.classpath
.project
# Dossiers spécifiques à NetBeans
nb-configuration/
nbproject/private/
# Fichiers spécifiques à NetBeans
nb-configuration.xml
# Dossiers spécifiques à VS Code
.vscode/

76
pom.xml Normal file
View File

@ -0,0 +1,76 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>hdpos</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>hdpos Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- JDBC Driver for Oracle Database -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc10</artifactId>
<version>19.8.0.0</version> <!-- Assurez-vous d'utiliser la version compatible avec votre Oracle Database -->
</dependency>
<!-- Jersey for JAX-RS (Java API for RESTful Web Services) -->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.41</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.41</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.41</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version> <!-- Remplacez par la version appropriée -->
<scope>provided</scope>
</dependency>
<!-- JSON dependencies -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version> <!-- Utilisez la dernière version disponible -->
</dependency>
</dependencies>
<build>
<finalName>hdpos</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.8.3</version>
<configuration>
<container>
<containerId>tomcat9x</containerId>
<type>embedded</type>
</container>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,50 @@
package com.example;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse; // Importez cette classe
import java.io.IOException;
public class CorsFilters implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// Utilisez HttpServletResponse au lieu de ServletResponse
HttpServletResponse httpResponse = (HttpServletResponse) response;
// Autoriser l'accès depuis n'importe quelle origine
httpResponse.setHeader("Access-Control-Allow-Origin", "*");
// Autoriser les méthodes HTTP spécifiées (GET, POST, OPTIONS, PUT, DELETE)
httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE");
// Autoriser les en-têtes spécifiés dans la requête
httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type");
// Permettre l'envoi de cookies (si nécessaire)
httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
// Durée de validité des résultats préalables (pré-vérifications OPTIONS)
httpResponse.setHeader("Access-Control-Max-Age", "3600");
// Continuer la chaîne de filtres
chain.doFilter(request, httpResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// Initialisation du filtre
}
@Override
public void destroy() {
// Destruction du filtre
}
}

View File

@ -0,0 +1,26 @@
package com.example.services;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnection implements AutoCloseable {
private Connection connection;
public DatabaseConnection(String dbHost, String username, String password) throws SQLException {
// Initialiser votre connexion à la base de données ici
connection = DriverManager.getConnection("jdbc:oracle:thin:@" + dbHost + ":1521/XSTORE", username, password);
}
public Connection getConnection() {
return connection;
}
@Override
public void close() throws SQLException {
if (connection != null && !connection.isClosed()) {
connection.close();
}
}
}

View File

@ -0,0 +1,28 @@
package com.example.services;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnectionDS implements AutoCloseable {
private Connection connection;
public DatabaseConnectionDS(String username, String password) throws SQLException {
// Initialiser votre connexion à la base de données ici
// jdbc:oracle:thin:@v-aspd-b01-ii-d.adic.lan:1521/IASPDI
// jdbc:oracle:thin:@v-aspd-b01-irdc.adic.lan:1521/MASPDI
connection = DriverManager.getConnection("jdbc:oracle:thin:@v-aspd-b01-irdc.adic.lan:1521/MASPDI", username, password);
}
public Connection getConnection() {
return connection;
}
@Override
public void close() throws SQLException {
if (connection != null && !connection.isClosed()) {
connection.close();
}
}
}

View File

@ -0,0 +1,52 @@
package com.example.services;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/database")
public class DatabaseService {
@GET
@Path("/replication")
@Produces(MediaType.APPLICATION_JSON)
public Response getCount(@QueryParam("dbHost") String dbHost) {
if (dbHost == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
}
DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
try (DatabaseConnection databaseConnection = new DatabaseConnection(dbHost, "repqueue", "repqueue")) {
String query = "SELECT COUNT(*) FROM CTL_REPLICATION_QUEUE";
try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query);
ResultSet resultSet = statement.executeQuery()) {
if (resultSet.next()) {
long count = resultSet.getLong(1);
// Construction manuelle de la réponse JSON
String jsonResponse = "{\"count\":" + count + "}";
return Response.ok(jsonResponse).build();
}
}
} catch (SQLException e) {
e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
// Construction de la réponse JSON en cas d'erreur
String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
}
return null;
}
}

View File

@ -0,0 +1,13 @@
package com.example.services;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/hello")
public class HelloWebService {
@GET
public String sayHello() {
return "Hello, world!";
}
}

View File

@ -0,0 +1,385 @@
package com.example.services;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
@Path("/items")
public class ItemService {
@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public Response getItemById(
@QueryParam("dbHost") String dbHost,
@QueryParam("itemId") String itemId) {
if (dbHost == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
}
if (itemId == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build();
}
DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
try (DatabaseConnection databaseConnection = new DatabaseConnection(dbHost, "dtv", "dtv")) {
String query = "SELECT * FROM ITM_ITEM WHERE ITEM_ID LIKE ?" ;
try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
// Concaténer % au paramètre itemId
statement.setString(1, itemId + "%");
try (ResultSet resultSet = statement.executeQuery()) {
List<Item> itemList = new ArrayList<>();
while (resultSet.next()) {
Item item = mapResultSetToItem(resultSet);
itemList.add(item);
}
if (!itemList.isEmpty()) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonResponse = objectMapper.writeValueAsString(itemList);
return Response.ok(jsonResponse).build();
} else {
return Response.status(Response.Status.NOT_FOUND).entity("{\"error\":\"No items found\"}").build();
}
}
}
} catch (SQLException e) {
e.printStackTrace();
String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
} catch (JsonProcessingException e) {
e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
}
}
private Item mapResultSetToItem(ResultSet resultSet) throws SQLException {
Item item = new Item();
item.setOrganizationId(resultSet.getLong("ORGANIZATION_ID"));
item.setItemId(resultSet.getString("ITEM_ID"));
item.setOrgCode(resultSet.getString("ORG_CODE"));
item.setOrgValue(resultSet.getString("ORG_VALUE"));
item.setName(resultSet.getString("NAME"));
item.setDescription(resultSet.getString("DESCRIPTION"));
item.setMerchLevel1(resultSet.getString("MERCH_LEVEL_1"));
item.setMerchLevel2(resultSet.getString("MERCH_LEVEL_2"));
item.setMerchLevel3(resultSet.getString("MERCH_LEVEL_3"));
item.setMerchLevel4(resultSet.getString("MERCH_LEVEL_4"));
item.setListPrice(resultSet.getInt("LIST_PRICE"));
item.setMeasureReqFlag(resultSet.getInt("MEASURE_REQ_FLAG"));
item.setItemLevelCode(resultSet.getString("ITEM_LVLCODE"));
item.setParentItemId(resultSet.getString("PARENT_ITEM_ID"));
item.setNotInventoriedFlag(resultSet.getInt("NOT_INVENTORIED_FLAG"));
item.setSerializedItemFlag(resultSet.getInt("SERIALIZED_ITEM_FLAG"));
item.setItemTypeCode(resultSet.getString("ITEM_TYPCODE"));
item.setDtvClassName(resultSet.getString("DTV_CLASS_NAME"));
item.setDimensionSystem(resultSet.getString("DIMENSION_SYSTEM"));
item.setDisallowMatrixDisplayFlag(resultSet.getInt("DISALLOW_MATRIX_DISPLAY_FLAG"));
item.setItemMatrixColor(resultSet.getString("ITEM_MATRIX_COLOR"));
item.setDimension1(resultSet.getString("DIMENSION1"));
item.setDimension2(resultSet.getString("DIMENSION2"));
item.setDimension3(resultSet.getString("DIMENSION3"));
item.setExternalSystem(resultSet.getString("EXTERNAL_SYSTEM"));
item.setCreateDate(resultSet.getTimestamp("CREATE_DATE"));
item.setCreateUserId(resultSet.getString("CREATE_USER_ID"));
item.setUpdateDate(resultSet.getTimestamp("UPDATE_DATE"));
item.setUpdateUserId(resultSet.getString("UPDATE_USER_ID"));
item.setRecordState(resultSet.getString("RECORD_STATE"));
return item;
}
public class Item {
private Long organizationId;
private String itemId;
private String orgCode;
private String orgValue;
private String name;
private String description;
private String merchLevel1;
private String merchLevel2;
private String merchLevel3;
private String merchLevel4;
private Integer listPrice;
private Integer measureReqFlag;
private String itemLevelCode;
private String parentItemId;
private Integer notInventoriedFlag;
private Integer serializedItemFlag;
private String itemTypeCode;
private String dtvClassName;
private String dimensionSystem;
private Integer disallowMatrixDisplayFlag;
private String itemMatrixColor;
private String dimension1;
private String dimension2;
private String dimension3;
private String externalSystem;
private Timestamp createDate;
private String createUserId;
private Timestamp updateDate;
private String updateUserId;
private String recordState;
// Getters and Setters for all fields
public Long getOrganizationId() {
return organizationId;
}
public void setOrganizationId(Long organizationId) {
this.organizationId = organizationId;
}
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
public String getOrgCode() {
return orgCode;
}
public void setOrgCode(String orgCode) {
this.orgCode = orgCode;
}
public String getOrgValue() {
return orgValue;
}
public void setOrgValue(String orgValue) {
this.orgValue = orgValue;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getMerchLevel1() {
return merchLevel1;
}
public void setMerchLevel1(String merchLevel1) {
this.merchLevel1 = merchLevel1;
}
public String getMerchLevel2() {
return merchLevel2;
}
public void setMerchLevel2(String merchLevel2) {
this.merchLevel2 = merchLevel2;
}
public String getMerchLevel3() {
return merchLevel3;
}
public void setMerchLevel3(String merchLevel3) {
this.merchLevel3 = merchLevel3;
}
public String getMerchLevel4() {
return merchLevel4;
}
public void setMerchLevel4(String merchLevel4) {
this.merchLevel4 = merchLevel4;
}
public Integer getListPrice() {
return listPrice;
}
public void setListPrice(Integer listPrice) {
this.listPrice = listPrice;
}
public Integer getMeasureReqFlag() {
return measureReqFlag;
}
public void setMeasureReqFlag(Integer measureReqFlag) {
this.measureReqFlag = measureReqFlag;
}
public String getItemLevelCode() {
return itemLevelCode;
}
public void setItemLevelCode(String itemLevelCode) {
this.itemLevelCode = itemLevelCode;
}
public String getParentItemId() {
return parentItemId;
}
public void setParentItemId(String parentItemId) {
this.parentItemId = parentItemId;
}
public Integer getNotInventoriedFlag() {
return notInventoriedFlag;
}
public void setNotInventoriedFlag(Integer notInventoriedFlag) {
this.notInventoriedFlag = notInventoriedFlag;
}
public Integer getSerializedItemFlag() {
return serializedItemFlag;
}
public void setSerializedItemFlag(Integer serializedItemFlag) {
this.serializedItemFlag = serializedItemFlag;
}
public String getItemTypeCode() {
return itemTypeCode;
}
public void setItemTypeCode(String itemTypeCode) {
this.itemTypeCode = itemTypeCode;
}
public String getDtvClassName() {
return dtvClassName;
}
public void setDtvClassName(String dtvClassName) {
this.dtvClassName = dtvClassName;
}
public String getDimensionSystem() {
return dimensionSystem;
}
public void setDimensionSystem(String dimensionSystem) {
this.dimensionSystem = dimensionSystem;
}
public Integer getDisallowMatrixDisplayFlag() {
return disallowMatrixDisplayFlag;
}
public void setDisallowMatrixDisplayFlag(Integer disallowMatrixDisplayFlag) {
this.disallowMatrixDisplayFlag = disallowMatrixDisplayFlag;
}
public String getItemMatrixColor() {
return itemMatrixColor;
}
public void setItemMatrixColor(String itemMatrixColor) {
this.itemMatrixColor = itemMatrixColor;
}
public String getDimension1() {
return dimension1;
}
public void setDimension1(String dimension1) {
this.dimension1 = dimension1;
}
public String getDimension2() {
return dimension2;
}
public void setDimension2(String dimension2) {
this.dimension2 = dimension2;
}
public String getDimension3() {
return dimension3;
}
public void setDimension3(String dimension3) {
this.dimension3 = dimension3;
}
public String getExternalSystem() {
return externalSystem;
}
public void setExternalSystem(String externalSystem) {
this.externalSystem = externalSystem;
}
public Timestamp getCreateDate() {
return createDate;
}
public void setCreateDate(Timestamp createDate) {
this.createDate = createDate;
}
public String getCreateUserId() {
return createUserId;
}
public void setCreateUserId(String createUserId) {
this.createUserId = createUserId;
}
public Timestamp getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Timestamp updateDate) {
this.updateDate = updateDate;
}
public String getUpdateUserId() {
return updateUserId;
}
public void setUpdateUserId(String updateUserId) {
this.updateUserId = updateUserId;
}
public String getRecordState() {
return recordState;
}
public void setRecordState(String recordState) {
this.recordState = recordState;
}
}
}

View File

@ -0,0 +1,179 @@
package com.example.services;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@Path("/stores")
public class StoreService {
private static List<store> cachedStoreList;
private static final Lock cacheLock = new ReentrantLock();
@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public Response getStoreById(@QueryParam("storeId") String storeId) {
if (storeId == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"storeId parameter is required\"}").build();
}
DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
// IASPDI com02 / B1Xto9pAbtBCOxuecG7W
// MASPDI com02 /
try (DatabaseConnectionDS databaseConnection = new DatabaseConnectionDS("com02", "B1Xto9pAbtBCOxuecG7W")) {
String query = "SELECT id_structure,nom,'10.100.0.18' AS ip, tel1 AS telephone FROM structure WHERE id_structure = ?" ;
try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
statement.setString(1, storeId);
try (ResultSet resultSet = statement.executeQuery()) {
if (resultSet.next()) {
store store = mapResultSetTostore(resultSet);
ObjectMapper objectMapper = new ObjectMapper();
String jsonResponse = objectMapper.writeValueAsString(store);
return Response.ok(jsonResponse).build();
} else {
return Response.status(Response.Status.NOT_FOUND).entity("{\"error\":\"No store found\"}").build();
}
}
}
} catch (SQLException e) {
e.printStackTrace();
String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
} catch (JsonProcessingException e) {
e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
}
}
@GET
@Path("/getAll")
@Produces(MediaType.APPLICATION_JSON)
public Response getAllStores() {
if (cachedStoreList == null) {
// Utilisation d'un verrou pour éviter que plusieurs requêtes déclenchent la récupération simultanée
cacheLock.lock();
try {
// Vérification à nouveau après avoir acquis le verrou
if (cachedStoreList == null) {
// Récupérer depuis la base de données seulement si la liste n'est pas en cache
cachedStoreList = retrieveStoresFromDatabase();
}
} finally {
cacheLock.unlock();
}
}
if (!cachedStoreList.isEmpty()) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonResponse;
try {
jsonResponse = objectMapper.writeValueAsString(cachedStoreList);
return Response.ok(jsonResponse).build();
} catch (JsonProcessingException e) {
e.printStackTrace();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
}
} else {
return Response.status(Response.Status.NOT_FOUND).entity("{\"error\":\"No stores found\"}").build();
}
}
private List<store> retrieveStoresFromDatabase() {
DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
try (DatabaseConnectionDS databaseConnection = new DatabaseConnectionDS("com02", "B1Xto9pAbtBCOxuecG7W")) {
String query = "SELECT st.id_structure, TRIM(st.nom) as nom, '10.100.0.18' AS ip, " +
"st.tel1 AS telephone " +
"FROM COM02.STRUCTURE st " +
"LEFT OUTER JOIN omni.ASPD_XSTO_STRUCTURE axs ON st.ID_STRUCTURE = axs.ID_STRUCTURE " +
"WHERE st.id_structure < 50";
try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query);
ResultSet resultSet = statement.executeQuery()) {
List<store> storeList = new ArrayList<>();
while (resultSet.next()) {
store store = mapResultSetTostore(resultSet);
storeList.add(store);
}
return storeList;
}
} catch (SQLException e) {
e.printStackTrace();
return Collections.emptyList();
}
}
private store mapResultSetTostore(ResultSet resultSet) throws SQLException {
store store = new store();
store.setId_structure(resultSet.getInt("ID_STRUCTURE"));
store.setNom(resultSet.getString("NOM"));
store.setIp(resultSet.getString("IP"));
store.setTelephone(resultSet.getString("TELEPHONE"));
return store;
}
public class store {
private Integer id_structure;
private String nom;
private String ip;
private String telephone;
public Integer getId_structure() {
return id_structure;
}
public void setId_structure(Integer id_structure) {
this.id_structure = id_structure;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
}
}

View File

@ -0,0 +1,35 @@
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.example.services</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>com.example.CorsFilters</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>