Compare commits
No commits in common. "stable-jersey" and "develop" have entirely different histories.
stable-jer
...
develop
55
pom.xml
55
pom.xml
@ -5,10 +5,10 @@
|
|||||||
|
|
||||||
<groupId>com.inteligr8.alfresco</groupId>
|
<groupId>com.inteligr8.alfresco</groupId>
|
||||||
<artifactId>aps-public-rest-client</artifactId>
|
<artifactId>aps-public-rest-client</artifactId>
|
||||||
<version>3.0.2-jersey</version>
|
<version>3.0-SNAPSHOT</version>
|
||||||
|
|
||||||
<name>Alfresco Process Services ReST API Client for Java</name>
|
<name>Alfresco Process Services ReST API Client for Java</name>
|
||||||
<description>An APS Client library for building Jersey-based REST API clients</description>
|
<description>An APS Client library for building REST API clients that support either the CXF and Jersey frameworks</description>
|
||||||
<url>https://bitbucket.org/inteligr8/aps-public-rest-client</url>
|
<url>https://bitbucket.org/inteligr8/aps-public-rest-client</url>
|
||||||
|
|
||||||
<licenses>
|
<licenses>
|
||||||
@ -45,20 +45,18 @@
|
|||||||
|
|
||||||
<junit.version>5.10.0</junit.version>
|
<junit.version>5.10.0</junit.version>
|
||||||
<spring.version>6.0.19</spring.version>
|
<spring.version>6.0.19</spring.version>
|
||||||
<jersey.version>3.1.8</jersey.version>
|
|
||||||
<jackson.version>2.17.2</jackson.version>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.inteligr8</groupId>
|
<groupId>com.inteligr8</groupId>
|
||||||
<artifactId>common-rest-client</artifactId>
|
<artifactId>common-rest-client</artifactId>
|
||||||
<version>3.0.0-jersey</version>
|
<version>3.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.inteligr8.alfresco</groupId>
|
<groupId>com.inteligr8.alfresco</groupId>
|
||||||
<artifactId>aps-public-rest-api</artifactId>
|
<artifactId>aps-public-rest-api</artifactId>
|
||||||
<version>3.0.5</version>
|
<version>3.0-SNAPSHOT</version>
|
||||||
<scope>provided</scope> <!-- explicitly, bring your own version -->
|
<scope>provided</scope> <!-- explicitly, bring your own version -->
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -85,55 +83,10 @@
|
|||||||
<version>2.20.0</version>
|
<version>2.20.0</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Jersey libraries -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.glassfish.jersey.inject</groupId>
|
|
||||||
<artifactId>jersey-hk2</artifactId>
|
|
||||||
<version>${jersey.version}</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.glassfish.jersey.media</groupId>
|
|
||||||
<artifactId>jersey-media-json-jackson</artifactId>
|
|
||||||
<version>${jersey.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Jersey inclusion fallout -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-annotations</artifactId>
|
|
||||||
<version>${jackson.version}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
|
||||||
<artifactId>build-helper-maven-plugin</artifactId>
|
|
||||||
<version>3.2.0</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>add-jaxrs-src</id>
|
|
||||||
<goals><goal>add-source</goal></goals>
|
|
||||||
<configuration>
|
|
||||||
<sources>
|
|
||||||
<source>src/main/jersey</source>
|
|
||||||
</sources>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
<execution>
|
|
||||||
<id>add-test-src</id>
|
|
||||||
<goals><goal>add-test-source</goal></goals>
|
|
||||||
<configuration>
|
|
||||||
<sources>
|
|
||||||
<source>src/test/jersey</source>
|
|
||||||
</sources>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>3.1.0</version>
|
<version>3.1.0</version>
|
||||||
|
@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.inteligr8.alfresco.activiti;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
|
|
||||||
import com.inteligr8.rs.ClientJerseyConfiguration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class provides a POJO & Spring-based implementation of the
|
|
||||||
* ClientJerseyConfiguration interface. You can use it outside of the Spring
|
|
||||||
* context, but you will need the spring-context and spring-beans libraries in
|
|
||||||
* your non-Spring application.
|
|
||||||
*
|
|
||||||
* @author brian@inteligr8.com
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
@ComponentScan
|
|
||||||
public class ApsClientJerseyConfiguration extends ApsClientConfiguration implements ClientJerseyConfiguration {
|
|
||||||
|
|
||||||
@Value("${process.service.jersey.putBodyRequired:true}")
|
|
||||||
private boolean putBodyRequired;
|
|
||||||
|
|
||||||
public boolean isPutBodyRequired() {
|
|
||||||
return this.putBodyRequired;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPutBodyRequired(boolean putBodyRequired) {
|
|
||||||
this.putBodyRequired = putBodyRequired;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
/*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.inteligr8.alfresco.activiti;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.context.annotation.Lazy;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import com.inteligr8.rs.ClientJerseyImpl;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class provides a POJO & Spring-based implementation of the Jersey
|
|
||||||
* client configured for APS. You can use it outside of the Spring context,
|
|
||||||
* but you will need the spring-context and spring-beans libraries in your
|
|
||||||
* non-Spring application.
|
|
||||||
*
|
|
||||||
* @author brian@inteligr8.com
|
|
||||||
*/
|
|
||||||
@Component("aps.client.jersey")
|
|
||||||
@Lazy
|
|
||||||
public class ApsClientJerseyImpl extends ClientJerseyImpl {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This constructor is for Spring and POJO use
|
|
||||||
*/
|
|
||||||
@Autowired
|
|
||||||
public ApsClientJerseyImpl(ApsClientJerseyConfiguration config) {
|
|
||||||
super(config);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.inteligr8.alfresco.activiti;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.context.annotation.Lazy;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class provides the Jersey client to the JAX-RS API for the Activiti &
|
|
||||||
* APS public ReST API and some non-public APS ReST API.
|
|
||||||
*
|
|
||||||
* @author brian@inteligr8.com
|
|
||||||
*/
|
|
||||||
@Component("aps.protected-api.jersey")
|
|
||||||
@Lazy
|
|
||||||
public class ApsProtectedRestApiJerseyImpl extends ApsProtectedRestApiImpl implements ApsProtectedRestJerseyApi {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This constructor is for Spring or POJO use
|
|
||||||
*/
|
|
||||||
@Autowired
|
|
||||||
public ApsProtectedRestApiJerseyImpl(ApsClientJerseyImpl client) {
|
|
||||||
super(client);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.inteligr8.alfresco.activiti;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.context.annotation.Lazy;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class provides the Jersey client to the JAX-RS API for the APS Public
|
|
||||||
* ReST API.
|
|
||||||
*
|
|
||||||
* @author brian@inteligr8.com
|
|
||||||
*/
|
|
||||||
@Component("aps.api.jersey")
|
|
||||||
@Lazy
|
|
||||||
public class ApsPublicRestApiJerseyImpl extends ApsPublicRestApiImpl implements ApsPublicRestJerseyApi {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This constructor is for Spring or POJO use
|
|
||||||
*/
|
|
||||||
@Autowired
|
|
||||||
public ApsPublicRestApiJerseyImpl(ApsClientJerseyImpl client) {
|
|
||||||
super(client);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
org.glassfish.jersey.client.JerseyClientBuilder
|
|
@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.inteligr8.alfresco.activiti;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.condition.EnabledIf;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.test.context.TestPropertySource;
|
|
||||||
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
|
|
||||||
|
|
||||||
import com.inteligr8.alfresco.activiti.model.Tenant;
|
|
||||||
import com.inteligr8.rs.ClientConfiguration;
|
|
||||||
|
|
||||||
@TestPropertySource(locations = {"/local.properties"})
|
|
||||||
@SpringJUnitConfig(classes = {ApsClientJerseyConfiguration.class, ApsPublicRestApiJerseyImpl.class, ApsClientJerseyImpl.class})
|
|
||||||
public class ArrayResponseUnitTest extends ConditionalIT {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
@Qualifier("aps.api.jersey")
|
|
||||||
private ApsPublicRestApiImpl api;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClientConfiguration getConfiguration() {
|
|
||||||
return this.api.getClient().getConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@EnabledIf("hostExists")
|
|
||||||
public void testTenants() {
|
|
||||||
List<Tenant> objs = this.api.getAdminApi().getTenants();
|
|
||||||
|
|
||||||
Assertions.assertNotNull(objs);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,45 +0,0 @@
|
|||||||
/*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.inteligr8.alfresco.activiti;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
|
||||||
|
|
||||||
import com.inteligr8.rs.ClientConfiguration;
|
|
||||||
|
|
||||||
public class ConnectionJerseyClientPojoIT extends ConnectionClientIT {
|
|
||||||
|
|
||||||
private static ApsPublicRestApiImpl api;
|
|
||||||
|
|
||||||
@BeforeAll
|
|
||||||
public static void initClient() {
|
|
||||||
ApsClientJerseyConfiguration config = new ApsClientJerseyConfiguration();
|
|
||||||
config.setBaseUrl("http://localhost:8080/activiti-app");
|
|
||||||
config.setBasicAuthUsername("admin");
|
|
||||||
config.setBasicAuthPassword("admin");
|
|
||||||
|
|
||||||
api = new ApsPublicRestApiJerseyImpl(
|
|
||||||
new ApsClientJerseyImpl(config));
|
|
||||||
}
|
|
||||||
|
|
||||||
public ApsPublicRestApiImpl getApi() {
|
|
||||||
return api;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClientConfiguration getConfiguration() {
|
|
||||||
return api.getClient().getConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.inteligr8.alfresco.activiti;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.test.context.TestPropertySource;
|
|
||||||
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
|
|
||||||
|
|
||||||
import com.inteligr8.rs.ClientConfiguration;
|
|
||||||
|
|
||||||
@TestPropertySource(locations = {"/local.properties"})
|
|
||||||
@SpringJUnitConfig(classes = {ApsClientJerseyConfiguration.class, ApsPublicRestApiJerseyImpl.class, ApsClientJerseyImpl.class})
|
|
||||||
public class ConnectionJerseyClientSpringIT extends ConnectionClientIT {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
@Qualifier("aps.api.jersey")
|
|
||||||
private ApsPublicRestApiImpl api;
|
|
||||||
|
|
||||||
public ApsPublicRestApiImpl getApi() {
|
|
||||||
return this.api;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClientConfiguration getConfiguration() {
|
|
||||||
return this.api.getClient().getConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.inteligr8.alfresco.activiti;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.condition.EnabledIf;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.test.context.TestPropertySource;
|
|
||||||
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
|
|
||||||
|
|
||||||
import com.inteligr8.alfresco.activiti.model.GroupLight;
|
|
||||||
import com.inteligr8.activiti.model.ResultList;
|
|
||||||
import com.inteligr8.alfresco.activiti.model.UserLight;
|
|
||||||
import com.inteligr8.rs.ClientConfiguration;
|
|
||||||
|
|
||||||
@TestPropertySource(locations = {"/local.properties"})
|
|
||||||
@SpringJUnitConfig(classes = {ApsClientJerseyConfiguration.class, ApsPublicRestApiJerseyImpl.class, ApsClientJerseyImpl.class})
|
|
||||||
public class ResultListResponseUnitTest extends ConditionalIT {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
@Qualifier("aps.api.jersey")
|
|
||||||
private ApsPublicRestApiImpl api;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClientConfiguration getConfiguration() {
|
|
||||||
return this.api.getClient().getConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@EnabledIf("hostExists")
|
|
||||||
public void testGroupMembers() {
|
|
||||||
List<GroupLight> groups = this.api.getAdminApi().getGroups(1L, false, false);
|
|
||||||
Assertions.assertFalse(groups.isEmpty());
|
|
||||||
|
|
||||||
for (GroupLight group : groups) {
|
|
||||||
ResultList<UserLight> users = this.api.getAdminApi().getMembers(group.getId(), null, null, null);
|
|
||||||
Assertions.assertNotNull(users);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user