2010-12-04 2 views
0

У меня есть веб-службы мыла, который имеет метод, каккак использовать возвращаемое значение мыла веб-службы в мыльном клиента

public WsResult doMyJob(String s, Information info); 

, когда я произвожу клиента из WSDL, в коде клиента метод моего WebService в становится чем-то вроде:

public Object doMyJob(String s, Object arg0); 

проблема в том, что я хочу, чтобы клиент мог реализовать/просматривать мои пользовательские классы (WsResult и информации) без явного определения их в своем коде.

Возможно ли это, и если да, то каким образом?

Благодаря

редактировать:

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="SendSms" targetNamespace="http://webservice.aaa.bbb.com/" xmlns:ns1="http://webservice.aaa.bbb.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <wsdl:types> 
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://webservice.aaa.bbb.com/" xmlns="http://webservice.aaa.bbb.com/" xmlns:tns="http://impl.webservice.aaa.bbb.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xsd:element name="registerScheduledSms" type="registerScheduledSms" /> 
<xsd:complexType name="registerScheduledSms"> 
<xsd:sequence> 
<xsd:element minOccurs="0" name="arg0" type="xsd:string" /> 
<xsd:element minOccurs="0" name="arg1" /> **HERE THERE SHOULD BE xsd definition for my custom class** 
<xsd:element minOccurs="0" name="arg2" /> **and here** 
<xsd:element minOccurs="0" name="arg3" type="xsd:dateTime" /> 
</xsd:sequence> 
</xsd:complexType> 
<xsd:element name="registerScheduledSmsResponse" type="registerScheduledSmsResponse" /> 
<xsd:complexType name="registerScheduledSmsResponse"> 
<xsd:sequence> 
<xsd:element minOccurs="0" name="return" /> 
</xsd:sequence> 
</xsd:complexType> 
</xsd:schema> 
    </wsdl:types> 
    <wsdl:message name="registerScheduledSmsResponse"> 
    <wsdl:part element="ns1:registerScheduledSmsResponse" name="parameters"> 
    </wsdl:part> 
    </wsdl:message> 
    <wsdl:message name="registerScheduledSms"> 
    <wsdl:part element="ns1:registerScheduledSms" name="parameters"> 
    </wsdl:part> 
    </wsdl:message> 
    <wsdl:portType name="SendSms"> 
    <wsdl:operation name="registerScheduledSms"> 
     <wsdl:input message="ns1:registerScheduledSms" name="registerScheduledSms"> 
    </wsdl:input> 
     <wsdl:output message="ns1:registerScheduledSmsResponse" name="registerScheduledSmsResponse"> 
    </wsdl:output> 
    </wsdl:operation> 
    </wsdl:portType> 
</wsdl:definitions> 

мой код услуги

@WebService(endpointInterface = "com.bbb.aaa.webservice.SendSms") 
public class SendSmsImpl implements SendSms { 

    private DbService dbService; 

    @Override 
    public WsResult registerScheduledSms(String applicationId, 
      ServiceAccount serviceAccount, Sms sms, Date scheduledDate) { 


     return dbService.addNewScheduledSms(applicationId, serviceAccount, sms, scheduledDate); 
    } 
} 

ответ

2

Да, это вполне возможно. Ваш soap-клиент должен генерировать все классы, определенные в типах схем на вашем WSDL. Вероятно, вы потеряли что-то в поколении клиентов.

Это поможет, если вы укажете какой вы используете для генерации клиента (AXIS, .NET, JAX-WS) и убедитесь, что ваш WSDL содержит определение схемы для WsResult и Information типов.

+0

привет спасибо за ваш ответ, я использую JAX-WS (двоичный файл wsdl2java) для создания клиента из wsdl. Но в моем wsdl-файле нет ничего о моих пользовательских классах. Я знаю, что это проблема. как я могу заставить свой сервер генерировать wsdl с моими определениями пользовательского класса? – dds 2010-12-04 11:48:37

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