АННОТАЦИЯ: Мыло отправляет ответ с xml (пример ниже), но кое-как, как я не вижу никаких данных с автоматическими предложениями, которые я использую из Jaxb2.
Я пытаюсь получить информацию отСлужба soap с этим конфигом:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.14.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<generateDirectory>${project.basedir}/src/main/java</generateDirectory>
<generatePackage>es.infobd</generatePackage>
<schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
<schemaIncludes>
<include>*.wsdl</include>
</schemaIncludes>
</configuration>
</plugin>
После генерации java-предложений с помощью maven generate-sources я реализую следующие методы:
Первый из них работает идеально, потому что это возврат нативного объекта (String), если я получаю getIdEmpresa (nifCif) .getGetIdEmpresaReturn () -> возвращает правильное и правильное значение.
public GetIdEmpresaResponse getIdEmpresa(String nifCif) {
GetIdEmpresa request = new GetIdEmpresa();
request.setNifCif(nifCif);
log.info("getIdEmpresa " + nifCif);
return (GetIdEmpresaResponse) getWebServiceTemplate().marshalSendAndReceive(
infoBDEndPoint, request);
}
Проблема возникает, когда я пытаюсь получить комплексный компонент, он возвращает компонент свсе атрибуты с нулевыми значениями.Это говорит о том, что я не способен отобразить ответ на компонент.getDatos (id) .getGetDatosReturn () -> дать мне объект с нулевыми атрибутами.
public GetDatosResponse getDatos(String id) {
GetDatos request = new GetDatos();
request.setId(id);
return (GetDatosResponse) getWebServiceTemplate().marshalSendAndReceive(
infoBDEndPoint, request);
}
Журнал мыла показывает следующее ->
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<getDatosResponse xmlns="http://ws.infoDB.es">
<getDatosReturn>
<CPostal>30400</CPostal>
<apellido1 xsi:nil="true" />
<apellido2 xsi:nil="true" />
<bep xsi:nil="true" />
<cif>B30423376</cif>
<codTipo>08</codTipo>
<correoElectronico>100_1@gmail.com</correoElectronico>
<domicilioSocial>Mi domicilio</domicilioSocial>
<fax xsi:nil="true" />
<idEmpresa>100</idEmpresa>
<localidad>
<codigo xsi:nil="true" />
<descripcion xsi:nil="true" />
</localidad>
<localidadE xsi:nil="true" />
<municipio>
<codigo>30015</codigo>
<descripcion>MunicipioXXX</descripcion>
</municipio>
<nif xsi:nil="true" />
<nombre xsi:nil="true" />
<numero>30</numero>
<pagWeb>www.100_1.com</pagWeb>
<provincia>
<codigo>30</codigo>
<descripcion>ProvinciaXXX</descripcion>
</provincia>
<provinciaE xsi:nil="true" />
<razonSocial>Nombre100</razonSocial>
<telefono>88888888</telefono>
<tipTer>1</tipTer>
<viaPub>
<codigo>PA</codigo>
<descripcion>Paraje</descripcion>
</viaPub>
</getDatosReturn>
</getDatosResponse>
</soapenv:Body>
</soapenv:Envelope>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header />
<SOAP-ENV:Body>
<ns2:getDatos xmlns:ns2="http://ws.infoDB.es" xmlns:ns3="http://beans.es">
<ns2:id>100</ns2:id>
</ns2:getDatos>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Так что я получаю информацию, ноПо какой-то причине jaxb2 не может сопоставить его с моим bean-компонентом.
Можете ли вы дать мне несколько советов, чтобы обойти это?
Фасоль, которая мне нужна:
<code>//
// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.3.0
// Visite <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen.
// Generado el: 2018.12.10 a las 01:58:18 PM CET
//
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;
/**
* <p>Clase Java para anonymous complex type.
*
* <p>El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase.
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="getDatosReturn" type="{http://beans.es}DatosBean"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
*
* * * /@XmlAccessorType (XmlAccessType.FIELD) @XmlType (name = "", propOrder = {"getDatosReturn"}) @XmlRootElement (name = "getDatosResponse") общедоступный класс GetDatosResponse {@XmlEleurnDesteatatDatatTeatatDeatatDateat/ ** * Obtiene el valor de la propiedad getDatosReturn.* * @return * возможным объектом является * {@link DatosBean} * * / public DatosBean getGetDatosReturn () {return getDatosReturn;} / ** * Определить el valor de la propiedad getDatosReturn.* * @param value * допустимым объектом является * {@link DatosBean} * * / public void setGetDatosReturn (значение DatosBean) {this.getDatosReturn = value;}}
ЭТО ОДИН, КОТОРЫЙ С НУЛЕМ
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DatosBean", namespace = "http://beans.es", propOrder = {
"cPostal",
"apellido1",
"apellido2",
"bep",
"cif",
"codTipo",
"correoElectronico",
"domicilioSocial",
"fax",
"idEmpresa",
"localidad",
"localidadE",
"municipio",
"nif",
"nombre",
"numero",
"pagWeb",
"provincia",
"provinciaE",
"razonSocial",
"telefono",
"tipTer",
"viaPub"
})
@XmlSeeAlso({
DatosDirBean.class
})
public class DatosBean {
@XmlElement(name = "CPostal", required = true, nillable = true)
protected String cPostal;
@XmlElement(required = true, nillable = true)
protected String apellido1;
@XmlElement(required = true, nillable = true)
protected String apellido2;
@XmlElement(required = true, nillable = true)
protected String bep;
@XmlElement(required = true, nillable = true)
protected String cif;
@XmlElement(required = true, nillable = true)
protected String codTipo;
@XmlElement(required = true, nillable = true)
protected String correoElectronico;
@XmlElement(required = true, nillable = true)
protected String domicilioSocial;
@XmlElement(required = true, nillable = true)
protected String fax;
@XmlElement(required = true, nillable = true)
protected String idEmpresa;
@XmlElement(required = true, nillable = true)
protected CodigoDescripcionBean localidad;
@XmlElement(required = true, nillable = true)
protected String localidadE;
@XmlElement(required = true, nillable = true)
protected CodigoDescripcionBean municipio;
@XmlElement(required = true, nillable = true)
protected String nif;
@XmlElement(required = true, nillable = true)
protected String nombre;
@XmlElement(required = true, nillable = true)
protected String numero;
@XmlElement(required = true, nillable = true)
protected String pagWeb;
@XmlElement(required = true, nillable = true)
protected CodigoDescripcionBean provincia;
@XmlElement(required = true, nillable = true)
protected String provinciaE;
@XmlElement(required = true, nillable = true)
protected String razonSocial;
@XmlElement(required = true, nillable = true)
protected String telefono;
@XmlElement(required = true, nillable = true)
protected String tipTer;
@XmlElement(required = true, nillable = true)
protected CodigoDescripcionBean viaPub;
}
Конфигурация пружины:
@Configuration
public class InfoBDConfig {
@Value("${infobd.endpoint}")
private String infoBDEndPoint;
@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("es.clients.infobd");
return marshaller;
}
@Bean
public InfobdClient infobdClient(Jaxb2Marshaller marshaller) {
InfobdClient client = new InfobdClient();
client.setDefaultUri(infoBDEndPoint);
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
return client;
}
}