Есть ли простой способ выполнить тест Junit на соответствие WSDL WS-I? - PullRequest
1 голос
/ 27 мая 2010

Я пытаюсь проверить сгенерированный WSDL на правильность. Я пробовал тестовый инструмент WS-i, загруженный с http://www.ws -i.org / , но этот инструмент тестирования требует, чтобы все входные данные проходили через XML-файл конфигурации, а выходные данные снова были выходным XML-файлом. Есть ли другой более простой способ проверки WSDL?

1 Ответ

0 голосов
/ 31 января 2011

Библиотека / банка Woden обеспечивает адекватную функциональность, позволяющую сделать это. Если ваш wsdl недействителен, последний оператор, reader.readWSDL (...), выдаст исключение.

import static junit.framework.Assert.fail;

import java.net.URISyntaxException;

import org.apache.woden.WSDLException;
import org.apache.woden.WSDLFactory;
import org.apache.woden.WSDLReader;
import org.apache.woden.wsdl20.Description;
import org.junit.Test;


public class WSDLValidationTest {
    String wsdlFileName =   "/MyService.wsdl";

    @Test
    public void validateWSDL2() throws WSDLException {

        String wsdlUri = null;
        try { 
            wsdlUri = this.getClass().getResource(wsdlFileName).toURI().toString();
        }
        catch( URISyntaxException urise) { 
            urise.printStackTrace();
            fail( "Unable to retrieve wsdl: " + urise.getMessage());
        }

        WSDLFactory factory = WSDLFactory.newInstance("org.apache.woden.internal.OMWSDLFactory");
        WSDLReader reader = factory.newWSDLReader();
        reader.setFeature(WSDLReader.FEATURE_VALIDATION, true);
        reader.readWSDL(wsdlUri);        
    }
}

А если вам нужен модульный тест для WSDL 1.1, см. Следующее:

import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.fail;

import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;

import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLReader;
import javax.xml.stream.XMLStreamException;

import org.junit.Before;
import org.junit.Test;
import org.xml.sax.SAXException;

import com.sun.xml.ws.api.model.wsdl.WSDLModel;
import com.sun.xml.ws.api.server.SDDocumentSource;
import com.sun.xml.ws.api.wsdl.parser.WSDLParserExtension;
import com.sun.xml.ws.api.wsdl.parser.XMLEntityResolver;


public class WSDLValidationTest {
    String wsdlFileName =   "/MyService.wsdl";
    String wsdlUri = null;
    URL wsdlUrl = null;

    @Before
    public void before() 
    {
        try { 
            wsdlUrl = this.getClass().getResource(wsdlFileName);
            wsdlUri = wsdlUrl.toURI().toString();
        }
        catch( URISyntaxException urise) { 
            urise.printStackTrace();
            fail( "Unable to retrieve wsdl: " + urise.getMessage());
        }
    }

    @Test
    public void parseAndValidateWSDL1_1WithWSDL4J() throws WSDLException
    {

        WSDLReader wsdlReader = null;
        try { 
            WSDLFactory factory = WSDLFactory.newInstance();
            wsdlReader = factory.newWSDLReader();
        }
        catch( WSDLException wsdle) { 
            wsdle.printStackTrace();
            fail( "Unable to instantiate wsdl reader: " + wsdle.getMessage());
        }

        // Read WSDL service interface document
        Definition def = wsdlReader.readWSDL(null, wsdlUri);
        assertNotNull(def);
    }

    @Test
    public void parseAndValidateWSDL1_1WithJaxWS() throws IOException, XMLStreamException, SAXException 
    {
        final SDDocumentSource doc = SDDocumentSource.create(wsdlUrl);
        final XMLEntityResolver.Parser parser =  new XMLEntityResolver.Parser(doc);
        WSDLModel model = WSDLModel.WSDLParser.parse( parser, null, false, new WSDLParserExtension[] {} );
        assertNotNull(model);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...