syy
syy

Reputation: 797

Use own WSDL file in JBoss Server (WIldfly 10.0)

How do make JBoss use a .wsdl file that I supply? Right now, it auto generates it. For example, if I have this interface and class:

CalculatorWebService

package test.example.ws;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface CalculatorWebService 
{
    @WebMethod
    public double add(@WebParam(name="number")double ... number);

    @WebMethod
    public double subtract(@WebParam(name="number")double ... number);

    @WebMethod
    public double multiply(@WebParam(name="number")double ... number);

    @WebMethod
    public double divide(@WebParam(name="number")double ... number);
}

CalculatorWSImpl

package test.example.ws.impl;

import javax.jws.WebService;

import test.example.ws.CalculatorWebService;

@WebService(endpointInterface = "test.example.ws.CalculatorWebService")
public class CalculatorWSImpl implements CalculatorWebService 
{
    public double add(double ... number) {
        if(number.length == 0)
            return 0.0;

        double sum = 0.0;

        for(double num : number)
            sum += num;

        return sum;
    }

    public double subtract(double ... number) {
        if(number.length == 0)
            return 0.0;

        double difference = number[0];

        for(int i = 1; i < number.length; i++)
            difference -= number[i];

        return difference;
    }

    public double multiply(double ... number) {
        if(number.length == 0)
            return 0.0;

        double product = 1.0;

        for(double num : number)
            product *= num;

        return product;
    }

    public double divide(double ... number) {
        if(number.length == 0)
            return 0.0;

        double quotient = number[0];

        for(int i = 1; i < number.length; i++)
            quotient /= number[i];

        return quotient;
    }
}

With this web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>WebServices</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>calculatorWebService</servlet-name>
    <servlet-class>test.example.ws.impl.CalculatorWSImpl</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>calculatorWebService</servlet-name>
    <url-pattern>/ws/calculator</url-pattern>
  </servlet-mapping>
</web-app>

Wildfly 10.0 will auto generate this .wsdl file:

<wsdl:definitions name="CalculatorWSImplService" targetNamespace="http://impl.ws.example.test/"><wsdl:import location="http://localhost:8080/WebServices/ws/calculator?wsdl=CalculatorWebService.wsdl" namespace="http://ws.example.test/">
    </wsdl:import><wsdl:binding name="CalculatorWSImplServiceSoapBinding" type="ns1:CalculatorWebService"><soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="add"><soap:operation soapAction="" style="document"/><wsdl:input name="add"><soap:body use="literal"/></wsdl:input><wsdl:output name="addResponse"><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="divide"><soap:operation soapAction="" style="document"/><wsdl:input name="divide"><soap:body use="literal"/></wsdl:input><wsdl:output name="divideResponse"><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="multiply"><soap:operation soapAction="" style="document"/><wsdl:input name="multiply"><soap:body use="literal"/></wsdl:input><wsdl:output name="multiplyResponse"><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="subtract"><soap:operation soapAction="" style="document"/><wsdl:input name="subtract"><soap:body use="literal"/></wsdl:input><wsdl:output name="subtractResponse"><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="CalculatorWSImplService"><wsdl:port binding="tns:CalculatorWSImplServiceSoapBinding" name="CalculatorWSImplPort"><soap:address location="http://localhost:8080/WebServices/ws/calculator"/></wsdl:port></wsdl:service></wsdl:definitions>

I want to make my own .wsdl file and use it. Would I have to add something to the web.xml? How would I go about doing this? The main reason I want to do this is because I will be able to link my own .xsd as well. How can I stop JBoss from generating its own .wsdl?

I tried Googling but I think I am not searching for the right keywords as I can't find anything.

Upvotes: 2

Views: 2059

Answers (1)

syy
syy

Reputation: 797

Turns out it was rather simple. In your implementation class just add the attribute wsdlLocation to the @WebService annotation.

So in my example, it will look like:

@WebService (
    endpointInterface = "test.example.ws.CalculatorWebService",
    wsdlLocation = "path/to/file.wsdl"
)

If you do it this way, you may need to specify the portName, serviceName, and targetNamespace attributes as well inside the @WebService annotation. All of these attributes should be inside your .wsdl file.

Upvotes: 1

Related Questions