Я пытаюсь создать (среди прочего) пользователей в системе JIRA. Для этого выберите использование Spring RestTemplate. Пока работает метод get for Users, метод create не используется. Я только когда-либо получал ответ 500 с сообщением:
«Запрос не выполнен. Мы не уверены, что пошло не так. Попробуйте еще раз, и если проблема не исчезнет, обратитесь в службу поддержки Jira».
Что я делаю неправильно? Я более или менее ориентируюсь на https://www.baeldung.com/rest-template, а здесь более конкретно часть с API обмена для почтового запроса.
Это моя самая важная функция тестирования, которая всегда дает сбой:
public static void mainToJira()
{
JiraUser testuser= new JiraUser();
testuser.setDisplayName("TestUser 0");
testuser.setName("TestUser0");
testuser.setEmailAddress("test@test.test");
testuser.setPassword("Passwort123");
RestTemplateFactory factory = new RestTemplateFactory();
factory.setHost("https://OURJIRASYSTEM/rest/api/latest/user");
factory.afterPropertiesSet();
RestTemplate restTemplate = factory.getObject();
restTemplate.getInterceptors()
.add(new BasicAuthorizationInterceptor("admin@user.de", "AdminPW4411"));
org.springframework.http.HttpEntity<JiraUser> payload = new HttpEntity<JiraUser>(testuser);
ResponseEntity<JiraUser> result=null;
try
{result = restTemplate.exchange("https://OURJIRASYSTEM/rest/api/2/user", HttpMethod.POST, payload,
JiraUser.class);
System.out.println((result.getStatusCode()));}
catch (Exception e)
{System.out.println(e.getMessage());}
}
А вот остальные зависимости для воспроизведения проблемы: (Особенности Spring взяты в основном из примеров)
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonIgnoreProperties (ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class JiraUser {
private String key;
private String accountId;
private String name;
private String emailAddress;
private String displayName;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private boolean active;
private String locale;
// private ArrayList<JiraGroup> groups;
// private ArrayList<JiraApplicationRole> roles;
private String password;
// public JiraUser()
// {
// groups=new ArrayList<JiraGroup>();
// roles=new ArrayList<JiraApplicationRole>();
// }
public String getAccountId() {
return accountId;
}
public String getDisplayName() {
return displayName;
}
public String getEmailAddress() {
return emailAddress;
}
public String getKey() {
return key;
}
public String getLocale() {
return locale;
}
public String getName() {
return name;
}
public boolean isActive() {
return active;
}
public void setAccountId(String accountId) {
this.accountId = accountId;
}
public void setActive(boolean active) {
this.active = active;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public void setKey(String key) {
this.key = key;
}
public void setLocale(String locale) {
this.locale = locale;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString()
{
return displayName+ " is active: "+active;
}
}
Factory:
import org.apache.http.HttpHost;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@Component
public class RestTemplateFactory
implements FactoryBean<RestTemplate>, InitializingBean {
private RestTemplate restTemplate;
private String hostName;
private int port;
private String protocol = "http";
public RestTemplate getObject() {
return restTemplate;
}
public Class<RestTemplate> getObjectType() {
return RestTemplate.class;
}
public boolean isSingleton() {
return true;
}
public void afterPropertiesSet() {
HttpHost host = new HttpHost(hostName, port, protocol);
restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactoryBasicAuth(host));
}
public String getHost() {
return hostName;
}
public void setHost(String host) {
this.hostName = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
}
BasicAuth:
import java.net.URI;
import org.apache.http.HttpHost;
import org.apache.http.client.AuthCache;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.BasicAuthCache;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.springframework.http.HttpMethod;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
public class HttpComponentsClientHttpRequestFactoryBasicAuth
extends HttpComponentsClientHttpRequestFactory {
HttpHost host;
public HttpComponentsClientHttpRequestFactoryBasicAuth(HttpHost host) {
super();
this.host = host;
}
protected HttpContext createHttpContext(HttpMethod httpMethod, URI uri) {
return createHttpContext();
}
private HttpContext createHttpContext() {
AuthCache authCache = new BasicAuthCache();
BasicScheme basicAuth = new BasicScheme();
authCache.put(host, basicAuth);
BasicHttpContext localcontext = new BasicHttpContext();
localcontext.setAttribute(HttpClientContext.AUTH_CACHE, authCache);
return localcontext;
}
}