cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alessio Bolognino <alessio.bologn...@gmail.com>
Subject Re: xsi:type of root element not being added to CXF request
Date Sat, 18 Apr 2020 00:08:13 GMT
I just found out that adding the annotation
@SchemaValidation(type = SchemaValidationType.OUT)
to the service interface solves this issue, the only difference between the
requests sent with
that annotation and those without it is that those with
`SchemaValidationType.OUT` have the `xsi:type` added to the root element.

This honestly does not make much sense to me, why would enable the
validation modify the request
begin sent?

Il giorno mer 15 apr 2020 alle ore 15:40 Alessio Bolognino <
alessio.bolognino@gmail.com> ha scritto:

> Hi, I've imported a wsdl using wsdl2java with JAXB as databinding, the
> generated Service interface is like this:
>
>     @WebService(targetNamespace = "http://www.sii.example.it/SWG1", name
> = "SWG1")
>     @XmlSeeAlso({it.au.switchgas.swg1.messaggio.ObjectFactory.class,
>
>  it.au.switchgas.swg1.strutturegenerali.ObjectFactory.class,
>                  it.au.switchgas.strutturegas.ObjectFactory.class,
>                  it.au.switchgas.swg1.flussi.ObjectFactory.class})
>     @SOAPBinding(style = SOAPBinding.Style.RPC)
>     public interface SWG1 {
>         @WebMethod(operationName = "SWG1.0050", action = "SWG1.0050")
>         @WebResult(name = "MessaggioSII", targetNamespace = "
> http://www.sii.example.it/SWG1", partName = "MessaggioSII")
>         public it.au.switchgas.swg1.messaggio.ResponseMessageType swg10050(
>             @WebParam(partName = "MessaggioSII", name = "MessaggioSII")
>             it.au.switchgas.swg1.messaggio.SWG1MessageType messaggioSII
>         );
>     }
>
> SWG1MessageType is a subclass of MessageType and it's defined like this:
>
>     @XmlAccessorType(XmlAccessType.FIELD)
>     @XmlType(name = "SWG1MessageType")
>     public class SWG1MessageType extends MessageType { }
>
> the provider of the service is currently rejecting my messages complaining
> about
> the MessaggioSII missing the xsi:type definition, inspecting the request I
> indeed noticed
> the lack of xsi:type for the MessaggioSII element:
>
>
>     <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>         <soap:Body>
>             <ns1:SWG1.0050 xmlns:ns1="http://www.sii.example.it/SWG1">
>                 <MessaggioSII
>                     xmlns:ns2="
> http://www.example.it/schemas/SII_AU/StruttureGenerali/v1.9"
>                     xmlns:ns3="
> http://www.example.it/schemas/SII_AU/Flussi_SWG1/v1"
>                     xmlns:ns4="
> http://www.example.it/schemas/SII_AU/StruttureGAS/v1.7"
>                     xmlns:ns5="
> http://www.example.it/schemas/2010/SII_AU/MessaggioSII">
>                     <!-- no xsi:type here -->
>                     <ns5:RichiestaSII
>                         xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance"
>                         xsi:type="ns5:RichiestaSwitchingRichiestaSIIType">
>                         <!-- omissis -->
>                     </ns5:RichiestaSII>
>                     <ns5:DatiSII
>                         xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance"
>                         xsi:type="ns5:RichiestaSwitchingDatiSIIType">
>                         <!-- omissis -->
>                     </ns5:DatiSII>
>                 </MessaggioSII>
>             </ns1:SWG1.0050>
>         </soap:Body>
>     </soap:Envelope>
>
> Is this behaviour expected?
> Is there a way to add the xsi:type to the MessaggioSII element?
>
> The only workaround I've found so far is to add a type attribute myself
> but this
> is not optimal either since I have to "guess" the namespace prefix (ns6 in
> the example)
>
>     @XmlAccessorType(XmlAccessType.FIELD)
>     @XmlType(name = "SWG1MessageType")
>     public class SWG1MessageType extends MessageType
>     {
>         @XmlAttribute(name = "type", namespace =
> XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI)
>         private String xsiType = "ns6:SWG1MessageType";
>     }
>
>
> All this is doable with xmlbeans but I'm trying to move to JAXB.
>
>
> --
> Alessio Bolognino
>


-- 
Alessio Bolognino

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message