2015-11-24 4 views
0

Целью того, что я пытаюсь достичь, довольно просто (по-моему, так оно и есть).Автоматизация создания Java-сервисов из простых POJO

У меня есть простой класс java, содержащий способ doAction (SomeObject obj). Я хочу показать его как веб-сервис CXF и его WSDL. В этом случае будет использоваться подход снизу вверх.

Теперь для одного класса или двух я мог бы использовать мастер создания веб-сервисов Eclipse. Но скажем, у меня есть 30-35 таких случаев, я надеялся автоматизировать процесс.

Любые идеи о том, как это сделать?

Добавление немного больше информации о цели:

Допустим, у меня есть интерфейс,

public interface IProcessService { 

public SomeObject doAction (SomeObject input) throws Exception; 

} 

и у меня есть его конкретная реализация

@Service 
@ManagedResource 
public class ProcessServiceImpl implements IProcessService { 

public SomeObject doAction(SomeObject input) throws Exception{ 
//doSomething 
} 
} 

Теперь я мог бы разбора интерфейс или конкретную услугу для создания следующего служебного интерфейса, который будет отображаться как:

@WebService (targetnamespace="...", name="...", portname="...", serviceName="...") 
public interface IExposedService{ 

@WebResult(name="output", targetnamespace="...") 
@RequestWrapper(...) 
@ResponseWrapper(...) 
@WebMethod(action="...") 
public SomeObject doAction(@WebParam(name="input") Someobject input) throws Exception; 

} 

Моя цель - создать прагматически последний интерфейс.

+0

Можете ли вы описать, какой результат вы хотите (вы упомянули классы WsTest)? – hinneLinks

+0

Обновлено, вопрос – beingsuplab

ответ

1

Вы можете использовать jdk-tool wsgen. Это требует, чтобы ваш класс Webservice имел аннотацию @WebService.

Пример:

Услуги:

package org.wstest; 
import javax.jws.WebService; 
@WebService 
public class WsTest { 
    public String doAction(MyObject o){ 
     String result = o.getText() + " - " + o.getNumber(); 
     return result; 
    } 
} 

Объект

package org.wstest; 
import java.io.Serializable; 
public class MyObject implements Serializable{ 
    private static final long serialVersionUID = 806129776947567877L; 
    private String text; 
    private int number; 
    public MyObject() { 
    } 
    public String getText() { 
     return text; 
    } 
    public void setText(String text) { 
     this.text = text; 
    } 
    public int getNumber() { 
     return number; 
    } 
    public void setNumber(int number) { 
     this.number = number; 
    } 
} 

Wsgen вызов: (при условии, что текущая папка содержит классы (папку org и подкаталоги с .class файлов) и папка out)

wsgen.exe -wsdl -d out -cp . org.wstest.WsTest 

Это создаст несколько файлов, включая wsdl. У меня нет инфраструктуры для тестирования сгенерированного wsdl.

Затем вы можете написать пакетный скрипт для генерации wsdls для всех ваших классов.

+0

Да, но моя цель - сгенерировать сам класс WsTest, а не только wsdls. Что касается части поколения wsdl, да, это, безусловно, способ, которым я верю. Вы проверите это. – beingsuplab

Смежные вопросы