Ответ состоящий из списка в Soap
Я делаю SOAP с wsdl в Spring. Пока что я сделал поиск человека по его id. Но мне помимо этого поиска нужно сделать поиск людей возраст которых больше тридцати лет, но я не знаю как вернуть коллекцию состоящих из результата поиска в ответ SOAP сервера. Вот мой код: Код класса PersonForSoap:
package com.soapService.SOAP;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import java.math.BigDecimal;
import java.time.LocalDate;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "PersonForSoap", propOrder = {
"Id",
"FirstName",
"LastName",
"Birthdate",
"Age",
"Gender",
"Name",
"Salary"
})
public class PersonForSoap {
@XmlElement(required = true)
private Integer Id;
private String FirstName;
private String LastName;
private LocalDate Birthdate;
private Integer Age;
private Gender Gender;
private String Name;
private BigDecimal Salary;
public BigDecimal getSalary() {
return Salary;
}
public void setSalary(BigDecimal salary) {
Salary = salary;
}
public Integer getId() {
return Id;
}
public void setId(Integer id) {
Id = id;
}
public String getFirstName() {
return FirstName;
}
public void setFirstName(String firstName) {
FirstName = firstName;
}
public String getLastName() {
return LastName;
}
public void setLastName(String lastName) {
LastName = lastName;
}
public LocalDate getBirthdate() {
return Birthdate;
}
public void setBirthdate(LocalDate birthdate) {
Birthdate = birthdate;
}
public Integer getAge() {
return Age;
}
public void setAge(Integer age) {
Age = age;
}
public Gender getGender() {
return Gender;
}
public void setGender(Gender gender) {
Gender = gender;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public PersonForSoap(Integer id, String firstName, String lastName, LocalDate birthdate, Integer age, Gender gender, String name, BigDecimal salary) {
Id = id;
FirstName = firstName;
LastName = lastName;
Birthdate = birthdate;
Age = age;
Gender = gender;
Name = name;
Salary = salary;
}
public PersonForSoap()
{
}Зук
}
Код класса ListPersonForSoap(репозитория):
package com.soapService.SOAP;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import javax.annotation.PostConstruct;
import java.io.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Stream;
@Component
public class ListPersonForSoap {
private static final List<PersonForSoap> listPFS = new ArrayList<PersonForSoap>();
private Repository r;
final String fileName="C:\\Users\\Data\\Documents\\SOAP\\target\\classes\\persons.csv";
@PostConstruct
public void initData() throws FileNotFoundException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
File f = new File(fileName);
BufferedReader fin = new BufferedReader(new FileReader(f));
String line;
Scanner in = new Scanner(new File(fileName));
while (in.hasNextLine()) {
String buf = in.nextLine();
if (buf.startsWith("id")) {
;
} else {
String[] bufArray = buf.split(";");
int id = Integer.parseInt(bufArray[0]);
String firstName = bufArray[1];
String lastName = bufArray[2];
Gender gender = Gender.valueOf(bufArray[3].toUpperCase());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
LocalDate date = LocalDate.parse(bufArray[4], formatter);
String Name = bufArray[5];
LocalDate now = LocalDate.now();
//Period p = new Period(date, now);
Integer age = (int) ChronoUnit.YEARS.between(date, now);
BigDecimal money = new BigDecimal(bufArray[6]);
PersonForSoap bufObject = new PersonForSoap( id, firstName, lastName, date, age, gender, Name, money);
if (bufObject != null) {
listPFS.add(bufObject) ;
}
}
}
}
public PersonForSoap findPerson(Integer id) {
Assert.notNull(id, "The Person id name must not be null");
//PersonForSoap personForSoap=new PersonForSoap();
for (PersonForSoap personForSoap : listPFS) {
if (personForSoap.getId().equals(id)) {
return personForSoap;
}
}
// return listPFS.get(id);
return null;
}
public Stream<PersonForSoap> twoMethod(int age) {
//BigDecimal valDouble = new BigDecimal(5000);
return listPFS.stream().filter(s -> s.getAge() > age);
}
}
Код класса PersonEndPoint:
package com.soapService.SOAP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
import xmlPackage.PersonDetailsRequest;
import xmlPackage.PersonDetailsResponse;
@Endpoint
public class PersonEndPoint {
private static final String NAMESPACE_URI = "https://www.howtodoinjava.com/xml/school";
private ListPersonForSoap listPersonForSoap;
@Autowired
public PersonEndPoint(ListPersonForSoap listPersonForSoap) {
this.listPersonForSoap = listPersonForSoap;
}
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "PersonDetailsRequest")
@ResponsePayload
public PersonDetailsResponse getStudent(@RequestPayload PersonDetailsRequest request) {
PersonDetailsResponse response = new PersonDetailsResponse();
response.setPersonForSoap(listPersonForSoap.findPerson(request.getId()));
return response;
}
}
Код класса PersonDetailsRequest:
package xmlPackage;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"Id"
})
@XmlRootElement(namespace = "https://www.howtodoinjava.com/xml/school",name = "PersonDetailsRequest")
public class PersonDetailsRequest {
@XmlElement(namespace = "https://www.howtodoinjava.com/xml/school",required = true)
protected Integer Id;
public Integer getId() {
return Id;
}
public void setId(Integer id) {
Id = id;
}
}
Код класса PersonDetailsResponse:
package xmlPackage;
import com.soapService.SOAP.PersonForSoap;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"personForSoap"
})
@XmlRootElement(name = "PersonDetailsResponse")
public class PersonDetailsResponse {
@XmlElement(name = "PersonForSoap", required = true)
protected PersonForSoap personForSoap;
public PersonForSoap getPersonForSoap() {
return personForSoap;
}
public void setPersonForSoap(PersonForSoap personForSoap) {
this.personForSoap = personForSoap;
}
}
Код схемы person.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="https://www.howtodoinjava.com/xml/school"
targetNamespace="https://www.howtodoinjava.com/xml/school" elementFormDefault="qualified">
<xs:simpleType name="enum" final="restriction" >
<xs:restriction base="xs:string">
<xs:enumeration value="MALE" />
<xs:enumeration value="FEMALE" />
</xs:restriction>
</xs:simpleType>
<xs:element name="PersonDetailsRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="Id" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PersonDetailsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="PersonForSoap" type="tns:PersonForSoap"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="PersonForSoap">
<xs:sequence>
<xs:element name="Id" type="xs:integer"/>
<xs:element name="FirstName" type="xs:string"/>
<xs:element name="LastName" type="xs:string"/>
<xs:element name="Birthdate" type="xs:date"/>
<xs:element name="Age" type="xs:integer"/>
<xs:element name="Gender" type="tns:enum"/>
<xs:element name="Name" type="xs:string"/>
<xs:element name="Salary" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Помогите пожалуйста разобраться с данным вопросом.