Java Jaxb2中没有来自SOAP调用的数据

Java Jaxb2中没有来自SOAP调用的数据,java,soap,spring-boot,jaxb2,Java,Soap,Spring Boot,Jaxb2,我已解组我的wsdl,并将生成的源放在包下: 一个人 封送员设置: @Configuration public class MarshalConfig { @Bean public Jaxb2Marshaller marshaller() { Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); //marshaller.setContextPath("generated.person"); marshaller.setP

我已解组我的wsdl,并将生成的源放在包下: 一个人

封送员设置:

@Configuration
public class MarshalConfig {
@Bean
public Jaxb2Marshaller marshaller() {
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
    //marshaller.setContextPath("generated.person");
    marshaller.setPackagesToScan("generated.person");
    return marshaller;
}

@Bean
public RKIClient rkiClient(Jaxb2Marshaller marshaller) {
    RKIClient client = new RKIClient();
    client.setDefaultUri("https://uat.ws2.rki.dk/person.asmx");
    client.setMarshaller(marshaller);
    client.setUnmarshaller(marshaller);
    return client;
}

}
"soegPersonCprResult": {
"error": null,
"person": null,
"adresser": null
}
我的春季开机呼叫:

public SoegPersonCprResponse getPersonWithCPR(String cpr) {
    String retVal = "";
    SoegPersonCpr request = new SoegPersonCpr();
    request.setBrugernavn(RKIClient.RKI_USERNAME);
    request.setPassword(RKIClient.RKI_PASSWORD);
    request.setCPRnummer(cpr);
    SoegPersonCprResponse response = (SoegPersonCprResponse) getWebServiceTemplate()
            .marshalSendAndReceive("https://uat.ws2.rki.dk/person.asmx",
                    request,
                    new SoapActionCallback("http://webservices.rki.dk/SoegPersonCpr"));

    return response;
}
调用的响应是:(由于Web服务中的@responsebody而产生的JSON)

@Configuration
public class MarshalConfig {
@Bean
public Jaxb2Marshaller marshaller() {
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
    //marshaller.setContextPath("generated.person");
    marshaller.setPackagesToScan("generated.person");
    return marshaller;
}

@Bean
public RKIClient rkiClient(Jaxb2Marshaller marshaller) {
    RKIClient client = new RKIClient();
    client.setDefaultUri("https://uat.ws2.rki.dk/person.asmx");
    client.setMarshaller(marshaller);
    client.setUnmarshaller(marshaller);
    return client;
}

}
"soegPersonCprResult": {
"error": null,
"person": null,
"adresser": null
}
但是,当我在SOAPui中输入相同的数据时,会返回以下结果:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <SoegPersonCprResponse xmlns="http://webservices.rki.dk/">
         <SoegPersonCprResult>
            <Error xsi:type="XmlErrorOk" xmlns="http://webservices.rki.dk">
               <Code>0</Code>
               <Text>Ok</Text>
            </Error>
            <Person stamkortNr="3940982" xmlns="http://webservices.rki.dk">
               <Navnedata xsi:type="PersonNavnData" beskyttet="N">
                  <Fornavne>REAL LIFE NAME</Fornavne>
                  <Efternavn>LAST NAME</Efternavn>
               </Navnedata>
               <Adresse udenlandsk="N" beskyttet="N" VejNr="1671">
                  <PostDistrikt>
                     <Navn>ADRESS</Navn>
                     <PostNr>7777</PostNr>
                  </PostDistrikt>
                  <Kommune>
                     <Kode>766</Kode>
                  </Kommune>
                  <HusNr fraNr="5"/>
                  <Vej>wildroad</Vej>
                  <Dato>27082012</Dato>
               </Adresse>
               <Foedselsdato>15111996</Foedselsdato>
               <CprStatus>AKT</CprStatus>
               <Kreditadvarsel AendretDato="23032017">J</Kreditadvarsel>
            </Person>
            <Adresser xmlns="http://webservices.rki.dk">
               <StatusKode>1</StatusKode>
               <CodeMoniker>EksaktSvar</CodeMoniker>
            </Adresser>
         </SoegPersonCprResult>
      </SoegPersonCprResponse>
   </soap:Body>
</soap:Envelope>
配置:

String uri = "https://uat.ws2.rki.dk/person.asmx";

Jaxb2Marshaller jaxb2 = new Jaxb2Marshaller();
jaxb2.setContextPath(request.getClass().getPackage().getName());
WebServiceTemplate ws = getWebServiceTemplate();
ws.setMarshaller(jaxb2);
ws.setUnmarshaller(jaxb2);
以及具有调用本身的侦听器:

    try {

        final StringBuffer sb = new StringBuffer();

        ClientInterceptor clientInterceptor = new ClientInterceptor() {

            @Override
            public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException {
                WebServiceMessage message = messageContext.getResponse();
                ByteArrayOutputStream bytArrayOutputStream = new ByteArrayOutputStream();
                try {
                    message.writeTo(bytArrayOutputStream);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                String test = new String(bytArrayOutputStream.toByteArray());
                sb.append(test);
                // System.out.println(test);
                return true;
            }

            @Override
            public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException {
                // TODO Auto-generated method stub
                return true;
            }

            @Override
            public boolean handleFault(MessageContext messageContext) throws WebServiceClientException {
                // TODO Auto-generated method stub
                return true;
            }
        };
        ClientInterceptor[] interceptors = interceptors = new ClientInterceptor[1];
        interceptors[0] = clientInterceptor;
        ws.setInterceptors(interceptors);
        final StringBuffer sbuffer = new StringBuffer();                   

        SoegPersonCprResponse response =  (SoegPersonCprResponse) ws.marshalSendAndReceive(uri, request,
            new WebServiceMessageCallback() {
                @Override
                public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
                    ByteArrayOutputStream os = new ByteArrayOutputStream();
                    message.writeTo(os);
                    sbuffer.append(new String(os.toByteArray()));
                }
            });
     } catch (Exception e) {
        throw e;
     }

PS:当从类型
SoegPersonCprResponse
或从Jaxb生成的其他类型创建对象时,我建议使用
ObjectFactory

记录您作为请求发送的内容吗?也许有问题。您是否尝试在SoapUI中处理该请求?这是从您试图调用的Web服务的.wsdl生成的
SoegPersonCpr
类,还是仅仅手工制作的?我调试,并查看请求对象中的值与我在SOAPui中发送的值相同。它们是用jaxbHmm自动生成的,在debug中查看值是不够的,有时事情发生在较低的级别上,您无法如此容易地看到。尝试放置一个拦截器,以查看您作为纯字符串(xml)发送和接收的确切请求和响应,这样您就可以确保问题不在我们这边,比如映射对象等等。我将在答案中添加一个简单的例子。谢谢,我并没有真正解决它,但自从我尝试了另一个解组器(gradle任务)后,问题就消失了。虽然我真的很喜欢这个答案,因为我真的需要看看拦截器,并在寻找如何做到这一点!谢谢