web services हरण स्प्रिंग डब्ल्यूएस वेब सेवा के आउटपुट में नेमस्पेस उपसर्ग को निकालना




हिंदी में उपसर्ग की संख्या (2)

यह कठिन था

पहले: एक ऐसा वर्ग बनाएं जो साबुन अनुरोध और प्रतिक्रियाओं को रोकता है:

package examples.webservices.handler;

import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Set;

import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class CorrigirConteudoRequisicaoSOAP implements SOAPHandler<SOAPMessageContext> {
    public Set<QName> getHeaders() {
        return Collections.emptySet();
    }

    public boolean handleMessage(SOAPMessageContext messageContext) {
        this.corrigirConteudoRequisicaoSOAP(messageContext);
        return true;
    }

    private void corrigirConteudoRequisicaoSOAP(SOAPMessageContext messageContext){
        SOAPMessage msg = messageContext.getMessage();
        try {
            NodeList childNodes = msg.getSOAPBody().getChildNodes();

            for(int k = 0; k < childNodes.getLength(); k++){
                Node item = childNodes.item(k);
                String localName = item.getLocalName();
                {
                    item.setPrefix("");
                    Method m = SOAPElement.class.getDeclaredMethod("setElementQName", QName.class);
                    //I was forced to use reflection because the method setElementQname is not //visible, neither the class that implements it
                    m.invoke(item, new QName("", item.getLocalName()));
                    msg.saveChanges();
                }

            }
        } catch (Exception e) {
            try {
                msg.writeTo(System.out);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            System.out.println();
        }
    }

    public boolean handleFault(SOAPMessageContext messageContext) {
        return true;
    }

    public void close(MessageContext messageContext) {
    }

    public static void main(String[] args)throws Exception {
    }
}

दूसरा: साबुन संभाल करने के लिए सेवा को संबद्ध करें

public class PortalFornecedor {

    public Usuario getUsuario(){
        XIF367Afae09A3344Fbf2E1De819D6EcbaService classeComNomeFeio = new XIF367Afae09A3344Fbf2E1De819D6EcbaService();

        Usuario service = classeComNomeFeio.getHTTPPort();
        BindingProvider bp = (BindingProvider)service;
        Map<String, Object> requestContext = bp.getRequestContext();
        requestContext.put(BindingProvider.USERNAME_PROPERTY, "user");
        requestContext.put(BindingProvider.PASSWORD_PROPERTY, "pass");
        this.handle(service);
        return service;
    }

    public Object getDashboard(){
        return "";
    }
    // here we associate the service to soap handle
    private BindingProvider handle(Usuario service) {
        BindingProvider bp = (BindingProvider)service;
        @SuppressWarnings("rawtypes")
        List<Handler> chain = new ArrayList<Handler>();
        chain.add(new CorrigirConteudoRequisicaoSOAP());
        bp.getBinding().setHandlerChain(chain);
        return bp;
    }

    public static void main(String[] args) {

        PortalFornecedor pf = new PortalFornecedor();
        Usuario usuario = pf.getUsuario();
        LoginExecutarIN in = new LoginExecutarIN();
        generated.Usuario user = new generated.Usuario();
        user.setLogin("onias");
        user.setSenha("12345");
        user.setCodigoUsuario(0);
        in.setParametroEntrada(user);
        try {
            LoginExecutarOUT out = usuario.loginExecutar(in);
            // SOAPMessageContext.getMessage();

            System.out.println(out.getRegistroSelecionado().getNome());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

मैंने स्प्रिंग-डब्लूएस से वेब सेवा बनाई है जब मैं वेब सेवा के लिए एक अनुरोध भेजता हूं, तो यह मैं साबुन-यू में प्राप्त की गई प्रतिक्रिया है:

enter code here
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <ns2:SendResponse xmlns:ns2="http://mycompany.com/schema/">
         <ns2:SendResult>
            <ns2:Token>A00179-02</ns2:Token>
         </ns2:SendResult>
      </ns2:SendResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

क्या प्रतिक्रिया से "एनएस 2" नाम स्थान उपसर्ग से छुटकारा पाने का कोई तरीका है? मैंने कुछ विकल्पों का प्रयास किया: 1) उपसर्ग को "" में सेट करने के लिए मैन्युअल रूप से अपडेट किया गया पैकेज- info.java:

@XmlSchema(namespace = "http://mycompany.com/schema/",  
    xmlns = {   
        @XmlNs(namespaceURI = "http://mycompany.com/schema/", prefix = "")  
    },  
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)  

package com.example.foo.jaxb; 

2) प्रीपेक्स को "" क्यूएनई ऑब्जेक्ट में एंड पॉइंट में सेट करें:

return new JAXBElement<SendAndCommitResponse>(new QName("http://mycompany.com/schema/",
"SendResponse",""), SendResponse.class, response);

दोनों काम नहीं किया "Ns2" नाम स्थान उपसर्ग से छुटकारा पाने के लिए कैसे?


आखिरकार मैंने इसके लिए एक समाधान पाया।

मेरी समस्या JDK 6 के कारण rt.jar ( http://www.oracle.com/technetwork/java/javase/compatibility-137541.html ) का एक पूर्ण संस्करण शिपिंग नहीं थी।

मैंने निम्नलिखित को अपने maven कॉन्फ़िग में जोड़ दिया

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.6</version>
</dependency>

और फिर जोड़ा

@XmlSchema(namespace = "http://mycompany.com/schema/", 
   elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED).

पैकेज- info.java में (जैसा कि ऊपर @ एएडीसीयुयुर द्वारा सुझाया गया है)





spring-ws