I had similar problem when using CXF 3.4.x
The cause of my problem is caused by the org.glassfish.jaxb implementation 
(2.3.3).

I have to use com.sun.xml.bind implementation (2.2.11) (which is used by CXF 
3.2.x)


Ed Xu

Enterprise Business Services Technology (EBST)-ECPR

From: Matthias Tonhäuser <[email protected]>
Sent: Thursday, March 25, 2021 3:32 AM
To: [email protected]
Subject: How do I add the namespace to a XML tag in a request?

Hi,

I'm having difficulties getting a Java SOAP client to work. The client was 
generated using a wsdl file and the Apache CXF Maven plugin 3.4.3 (see below). 
The problem seems to be that the XML which is generated for the request does 
not include the correct namespaces. At least this is my take on it. This is the 
request xml:

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
      <soap:Header>
      <!-- Security information -->
      </soap:Header>
      <soap:Body>
        <ns2:createUserRequest xmlns:ns2="http://www.server.com/schema/user";>
          <user>
            <username>homer.simpson</username>
            <surname>simpson</surname>
            <firstname>homer</firstname>
            
<email>[email protected]</email<mailto:[email protected]%3c/email>>
            <password>superSecretPassword</password>
          </user>
        </ns2:createUserRequest>
      </soap:Body>
    </soap:Envelope>

This is the response from the server:

    <SOAP-ENV:Envelope 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";>
      <SOAP-ENV:Header/>
      <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
          <faultcode>SOAP-ENV:Client</faultcode>
          <faultstring xml:lang="en">Validation error</faultstring>
          <detail>
            <spring-ws:ValidationError 
xmlns:spring-ws="http://springframework.org/spring-ws";>cvc-complex-type.2.4.a: 
Invalid content was found starting with element 'user'. One of 
'{"http://www.server.com/schema/user":user<https://urldefense.com/v3/__http:/www.server.com/schema/user*22:user__;JQ!!F9svGWnIaVPGSwU!9LiQIH-IJ8gBhpglhwCb58BeoXkzKoLwztOGpy9fimIYUxESGFBh0frW8dPZneDvsg$>}'
 is expected.</spring-ws:ValidationError>
          </detail>
        </SOAP-ENV:Fault>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

I've succesfully created a request using SOAP UI 5.6.0. Here, the request looks 
as follows:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
                       xmlns:user="http://www.server.com/schema/user";>
      <soapenv:Header>
      <!-- Security information -->
      </soapenv:Header>
      <soapenv:Body>
        <user:createUserRequest>
          <user:user>
            <user:username>bart.simpson</user:username>
            <user:firstname>Bart</user:firstname>
            <user:surname>Simpson</user:surname>
            
<user:email>[email protected]</user:email<mailto:[email protected]%3c/user:email>>
            <user:password>superSecretPassword.</user:password>
          </user:user>
        </user:createUserRequest>
      </soapenv:Body>
    </soapenv:Envelope>

So, the difference is that the namespace prefix is not used in the first xml 
(edited - thanks vanje). Both xml files seem to be valid. It should be noted, 
however, that the schema file apparently cannot be accessed from the internet.

How do I remedy this?

Is this an issue of the generated client files? Or of the way in which I'm 
using my client?


I've created a SOAP client from a wsdl file using Apache CXF Maven plugin 
3.4.3. The following configuration was used:

     <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>${cxf.version}</version>
        <executions>
          <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
              
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
              <disableDirectoryScan>true</disableDirectoryScan>
              <defaultOptions>
                <extraargs>
                  <extraarg>-verbose</extraarg>
                  <extraarg>-validate</extraarg>
                  <extraarg>-impl</extraarg>
                  <extraarg>-client</extraarg>
                  <extraarg>-suppress-generated-date</extraarg>
                </extraargs>
              </defaultOptions>
              <wsdlOptions>
                <wsdlOption>
                  
<wsdl>${project.basedir}/src/main/resources/wsdl/user.wsdl</wsdl>
                  <serviceName>UserService</serviceName>
                  <wsdlLocation>classpath:user.wsdl</wsdlLocation>
                </wsdlOption>
              </wsdlOptions>
            </configuration>
            <goals>
              <goal>wsdl2java</goal>
            </goals>
          </execution>
        </executions>
      </plugin>


The method I'm using:

    @WebMethod
      @WebResult(name = "createUserResponse", targetNamespace = 
"http://www.server.com/schema/user";<https://urldefense.com/v3/__http:/www.server.com/schema/user*22__;JQ!!F9svGWnIaVPGSwU!9LiQIH-IJ8gBhpglhwCb58BeoXkzKoLwztOGpy9fimIYUxESGFBh0frW8dP7owOOMw$>,
          partName = "createUserResponse")
      public CreateUserResponse createUser(

          @WebParam(partName = "createUserRequest", name = "createUserRequest",
              targetNamespace = 
"http://www.server.com/schema/user";<https://urldefense.com/v3/__http:/www.server.com/schema/user*22__;JQ!!F9svGWnIaVPGSwU!9LiQIH-IJ8gBhpglhwCb58BeoXkzKoLwztOGpy9fimIYUxESGFBh0frW8dP7owOOMw$>)
 CreateUserRequest createUserRequest);


This is the client:

    public final class User_UserSoap11_Client {

      private static final QName SERVICE_NAME =
          new 
QName("http://www.server.com/schema/user";<https://urldefense.com/v3/__http:/www.server.com/schema/user*22__;JQ!!F9svGWnIaVPGSwU!9LiQIH-IJ8gBhpglhwCb58BeoXkzKoLwztOGpy9fimIYUxESGFBh0frW8dP7owOOMw$>,
 "UserService");

      private User_UserSoap11_Client() {}

      public static void main(String args[]) throws Exception {
        URL wsdlURL = UserService.WSDL_LOCATION;
        if (args.length > 0 && args[0] != null && !"".equals(args[0])) {
          File wsdlFile = new File(args[0]);
          try {
            if (wsdlFile.exists()) {
              wsdlURL = wsdlFile.toURI().toURL();
            } else {
              wsdlURL = new URL(args[0]);
            }
          } catch (MalformedURLException e) {
            e.printStackTrace();
          }
        }

        UserService ss = new UserService(wsdlURL, SERVICE_NAME);

        User port = ss.getUserSoap11();

        // Adding security information

        {
          System.out.println("Invoking createUser...");

          final Newusertype newuser = new Newusertype();
          newuser.setUsername("homer.simpson");
          newuser.setFirstname("homer");
          newuser.setSurname("simpson");
          
newuser.setEmail("[email protected]<mailto:[email protected]>");
          newuser.setPassword("mySecretPassword");
          CreateUserRequest _createUser_createUserRequest =
              new ObjectFactory().createCreateUserRequest();
          _createUser_createUserRequest.setUser(newuser);

          CreateUserResponse _createUser__return = null;
          try {
            _createUser__return = 
port.createUser(_createUser_createUserRequest);
          } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
          }

    }}

This is a shortened version of the WSDL file which was used:

    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
                      xmlns:tns="http://www.server.com/schema/user"; 
targetNamespace="http://www.server.com/schema/user";><https://urldefense.com/v3/__http:/www.server.com/schema/user*22*3E__;JSU!!F9svGWnIaVPGSwU!9LiQIH-IJ8gBhpglhwCb58BeoXkzKoLwztOGpy9fimIYUxESGFBh0frW8dPAkSscxQ$>
      <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns:vendoruser="http://www.server.com/schema/user";
                   elementFormDefault="qualified" 
targetNamespace="http://www.server.com/schema/user";<https://urldefense.com/v3/__http:/www.server.com/schema/user*22__;JQ!!F9svGWnIaVPGSwU!9LiQIH-IJ8gBhpglhwCb58BeoXkzKoLwztOGpy9fimIYUxESGFBh0frW8dP7owOOMw$>
 version="1.0">

          <xs:element name="createUserRequest" 
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
            <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema";>
              <xs:all xmlns:xs="http://www.w3.org/2001/XMLSchema";>
                <xs:element name="user" type="vendoruser:newusertype" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
              </xs:all>
            </xs:complexType>
          </xs:element>
          <xs:element name="createUserResponse" 
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
            <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema";>
              <xs:all xmlns:xs="http://www.w3.org/2001/XMLSchema";>
                <xs:element name="userid" type="xs:int" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
                <xs:element minOccurs="0" name="passwordlink" type="xs:string" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
              </xs:all>
            </xs:complexType>
          </xs:element>

          <xs:complexType name="newusertype" 
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
            <xs:all xmlns:xs="http://www.w3.org/2001/XMLSchema";>
              <xs:element name="username" type="xs:string" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
              <xs:element name="surname" type="xs:string" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
              <xs:element name="firstname" type="xs:string" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
              <xs:element name="email" type="xs:string" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
              <xs:element name="password" type="xs:string" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
              <xs:element name="customeridlist" type="vendoruser:idlist" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
            </xs:all>
          </xs:complexType>

          <xs:simpleType name="idlist" 
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
            <xs:list itemType="xs:int" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
          </xs:simpleType>

        </xs:schema>
      </wsdl:types>
      <wsdl:message name="createUserRequest">
        <wsdl:part element="tns:createUserRequest" name="createUserRequest">
        </wsdl:part>
      </wsdl:message>
      <wsdl:message name="createUserResponse">
        <wsdl:part element="tns:createUserResponse" name="createUserResponse">
        </wsdl:part>
      </wsdl:message>
      <wsdl:portType name="User">
        <wsdl:operation name="createUser">
          <wsdl:input message="tns:createUserRequest" name="createUserRequest">
          </wsdl:input>
          <wsdl:output message="tns:createUserResponse" 
name="createUserResponse">
          </wsdl:output>
        </wsdl:operation>
      </wsdl:portType>
      <wsdl:binding name="UserSoap11" type="tns:User">
        <soap:binding style="document" 
transport="http://schemas.xmlsoap.org/soap/http"/><https://urldefense.com/v3/__http:/schemas.xmlsoap.org/soap/http*22/*3E__;JSU!!F9svGWnIaVPGSwU!9LiQIH-IJ8gBhpglhwCb58BeoXkzKoLwztOGpy9fimIYUxESGFBh0frW8dPbnwj1Iw$>
        <wsdl:operation name="createUser">
          <soap:operation soapAction=""/>
          <wsdl:input name="createUserRequest">
            <soap:body use="literal"/>
          </wsdl:input>
          <wsdl:output name="createUserResponse">
            <soap:body use="literal"/>
          </wsdl:output>
        </wsdl:operation>
      </wsdl:binding>
      <wsdl:service name="UserService">
        <wsdl:port binding="tns:UserSoap11" name="UserSoap11">
          <soap:address 
location="https://server.com/vendor/services/"/><https://urldefense.com/v3/__https:/server.com/vendor/services/*22/*3E__;JSU!!F9svGWnIaVPGSwU!9LiQIH-IJ8gBhpglhwCb58BeoXkzKoLwztOGpy9fimIYUxESGFBh0frW8dNozbz3aA$>
        </wsdl:port>
      </wsdl:service>
    </wsdl:definitions>

This is the CreateUserRequest which was generated by Apache CXF 3.4.3

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {

    })
    @XmlRootElement(name = "createUserRequest")
    public class CreateUserRequest {

        @XmlElement(required = true)
        protected Newusertype user;

      // Getter and Setter
    }

This is the Newusertype object which was generated:

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "newusertype", propOrder = {

    })
    public class Newusertype {

        @XmlElement(required = true)
        protected String username;
        @XmlElement(required = true)
        protected String surname;
        @XmlElement(required = true)
        protected String firstname;
        @XmlElement(required = true)
        protected String email;
        @XmlElement(required = true)
        protected String password;
        @XmlList
        @XmlElement(type = Integer.class)
        protected List<Integer> customeridlist;

        // Getter and setter

    }


Disclosure: I posted this question on Stack Overflow 
(https://stackoverflow.com/questions/66784697/apache-cxf-how-do-i-add-the-namespace-to-a-xml-tag-in-a-soap-request<https://urldefense.com/v3/__https:/stackoverflow.com/questions/66784697/apache-cxf-how-do-i-add-the-namespace-to-a-xml-tag-in-a-soap-request__;!!F9svGWnIaVPGSwU!9LiQIH-IJ8gBhpglhwCb58BeoXkzKoLwztOGpy9fimIYUxESGFBh0frW8dPYTNIVFg$>)
 yesterday, but it got only a couple of views.


Kind regards
Matthias Tonhäuser


_________________________________________________________________________

[cid:[email protected]]

Matthias Tonhäuser  | Softwareentwickler
Fon 0251 9159-501

GuideCom AG | Hafenweg 14 | 48155 Münster | 
www.guidecom.de<https://urldefense.com/v3/__http:/www.guidecom.de/__;!!F9svGWnIaVPGSwU!9LiQIH-IJ8gBhpglhwCb58BeoXkzKoLwztOGpy9fimIYUxESGFBh0frW8dO0Mql_5g$>
 | Amtsgericht Münster HRB 18577
Vorstand: Robin Wunsch (Sprecher), Mathias Bokelmann, Günter Meyer, Dr. Michael 
Thygs
Aufsichtsrat: Robert Baresel (Vorsitzender), Prof. Dr. Margret Borchert, Prof. 
Dr. Jan Recker
_________________________________________________________________________

How tomorrow works.


Reply via email to