Xml обработка в запросе на отдых - PullRequest
0 голосов
/ 25 мая 2020

Java веб-сервис не может правильно обработать xml. А именно, он не может читать и формировать значения атрибутов. То есть такой xml -текст обрабатывается корректно и данные не теряются:

введите сюда описание изображения

Но если использовать атрибуты, то их значения не передается, а переменные в классе pojo остаются пустыми, хотя я использую необходимые аннотации. Xml пример:

введите сюда описание изображения

Также проблемы с формированием файла xml. Ожидаемый результат, который я хочу получить от веб-службы:

введите сюда описание изображения

Фактический результат:

введите сюда описание изображения

На передаваемые данные прошу не обращать внимания)

Источник.

Сам веб-сервис:

Тест. java

@RestController
@RequestMapping(path = "/test")
public class Test {
@Autowired
private Dao dao;

@ApiOperation(value = "", response = Response.class)
@RequestMapping(value = "/test-method", method = RequestMethod.POST,
                produces = {MediaType.APPLICATION_XML_VALUE},
                consumes = {MediaType.APPLICATION_XML_VALUE})
@ResponseBody
public Response method1(@RequestBody Request request) throws Throwable {
    Response res = dao.method1(request);
    return res;
}

}

Dao. java

public interface Dao {
    public Response method1(Request request) throws Throwable;
}

DaoImpl. java

@Service("Test")
@Repository
public class DaoImpl implements Dao {
    final static String SERVICE_NAME = "Test";

public Response method1(Request request) throws Throwable {
    ServiceMain c = new <Result>ServiceMain(SERVICE_NAME, Response.class);    

    /*
     Inbound and outbound processing
     and
     Work with a DB
    */

    return (Response)c.data;
}

}

Инициализатор. java

public class Initializer extends  AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { WebAppConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

SwaggerConfig. java

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build().apiInfo(metaData());
    }   

    private ApiInfo metaData() {
        return new ApiInfoBuilder().title("Test")
                                   .description("Test example").version("v1.0").build();
    }
}

WebAppConfig. java

@Configuration
@EnableWebMvc
@ComponentScan("ru.test")
public class WebAppConfig extends WebMvcConfigurerAdapter {

    public WebAppConfig() {
        super();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

Pojo-класс.

Запрос. java:

public class Request {
    private String n = null;
    private String v = null;
    private String sync = null;

    public void setN(String n) {
        this.n = n;
    }

    public void setV(String v) {
        this.v = v;
    }

    public void setSync(String sync) {
        this.sync = sync;
    }

    @XmlAttribute
    public String getN() {
        return n;
    }

    @XmlAttribute
    public String getV() {
        return v;
    }

    @XmlElement
    public String getSync() {
        return sync;
    }
}

UpdateItem. java

@XmlAccessorType(XmlAccessType.FIELD)
public class UpdateItem {
    private String sync = null;
    private String id = null;
    private String kbn = null;
    private String description = null;

    public void setSync(String sync) {
        this.sync = sync;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setKbn(String kbn) {
        this.kbn = kbn;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @XmlAttribute
    public String getSync() {
        return sync;
    }

    @XmlAttribute
    public String getId() {
        return id;
    }

    @XmlAttribute
    public String getKbn() {
        return kbn;
    }

    @XmlValue
    public String getDescription() {
        return description;
    }
}

UpdateItems. java

public class UpdateItems {
    private ArrayList<UpdateItem> i = null;

    public void setI(ArrayList<UpdateItem> i) {
        this.i = i;
    }

    @XmlElement
    public ArrayList<UpdateItem> getI() {
        return i;
    }
}

Ответ. java

@XmlRootElement
public class Response {

    private String sync = null;
    private UpdateItems item = null;
    private String error = null;

    public void setSync(String sync) {
        this.sync = sync;
    }

    public void setItem(UpdateItems item) {
        this.item = item;
    }

    public void setError(String error) {
        this.error = error;
    }

    @XmlElement
    public String getSync() {
        return sync;
    }

    @XmlElement
    public UpdateItems getItem() {
        return item;
    }

    @XmlElement
    public String getError() {
        return error;
    }
}
...