当前位置: 首页 > 知识库问答 >
问题:

没有complexType的Apach cxf soap wsdl

芮意
2023-03-14

我使用apache cxf创建了一个肥皂网络服务,当我发布我的网络服务时,我得到了一个没有复杂类型部分的WSDL,这是我的代码:

我的Interafce:

@WebService(targetNamespace = "http://v4.ws.provider.acp.com/", name = "IGetAuthorizationDetails")
public interface IGetAuthorizationDetailsWebService {

    @WebMethod(operationName = "getAuthorizationDetailsV4")
    @RequestWrapper(localName = "getAuthorization_V4", targetNamespace = "http://request.message.provider.acp.com/", className = "ws.model.request.GetAuthorizationDetailsV4")
    @ResponseWrapper(localName = "getAuthorizationDetails_V4Response", targetNamespace = "http://response.message.provider.acp.com/", className = "ws.model.response.GetAuthorizationDetails4Response")
    @WebResult(name = "GetAuthorizationDetailsV4Rs", targetNamespace = "")
    public GetAuthorizationDetailsV4Rs getAuthorizationDetails4(

            @WebParam(name = "GetAuthorizationDetailsV4Rq", targetNamespace = "")
            @Valid GetAuthorizationDetailsV4Rq request
    ) throws TechnicalException;
}

我的配置:

  @Bean
    public ISearchAuthorizationWebServicePort getISearchAuthorizationWebServicePort(){
        return new ISearchAuthorizationWebServicePort();
    }

@Bean
    public Endpoint getIGetAuthorizationDetailsEndpoint() {
        EndpointImpl endpoint = new EndpointImpl(bus,  getIGetAuthorizationDetailsWebServicePort());
        endpoint.publish("/GetAuthorizationDetailsTest/V4");

        return endpoint;
    }

我的请求对象:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "GetAuthorizationDetailsV4Rq", namespace = "http://request.message.provider.acp.com/", propOrder = {
        "referenceNumber",
})
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper=false)
public class GetAuthorizationDetailsV4Rq extends AbstractMessageV4Rq {

    @XmlElement(name = "referenceNumber")
    @Pattern(regexp = "^[A-Za-z0-9]*$", message = "ReferenceNumber must contains only alphanumeric characters")
 private String referenceNumber ;
   

}

这是生成的WSDL:

<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://ws.api.controller.ws/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns4="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://v4.ws.provider.acp.com/" name="IGetAuthorizationDetailsWebServicePortService" targetNamespace="http://ws.api.controller.ws.pwc/">
<wsdl:import location="http://localhost:8082/home/GetAuthorizationDetails/V4?wsdl=IGetAuthorizationDetails.wsdl" namespace="http://v4.ws.provider.acp.com/"> </wsdl:import>
<wsdl:binding name="IGetAuthorizationDetailsWebServicePortServiceSoapBinding" type="ns1:IGetAuthorizationDetails">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getAuthorizationDetailsV4">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="getAuthorizationDetailsV4">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getAuthorizationDetailsV4Response">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="TechnicalException">
<soap:fault name="TechnicalException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="IGetAuthorizationDetailsWebServicePortService">
<wsdl:port binding="tns:IGetAuthorizationDetailsWebServicePortServiceSoapBinding" name="IGetAuthorizationDetailsWebServicePortPort">
<soap:address location="http://localhost:8082/home/GetAuthorizationDetails/V4"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

为什么在生成的WSDL中找不到像“referenceNumber”这样的请求属性

共有1个答案

燕宏胜
2023-03-14

检查导入的WSDL,查看请求对象是否在其中定义。看看WSDL中的这一行:

<wsdl:import location="http://localhost:8082/home/GetAuthorizationDetails/V4?wsdl=IGetAuthorizationDetails.wsdl" namespace="http://v4.ws.provider.acp.com/"> </wsdl:import>

如果打开http://localhost:8082/home/GetAuthorizationDetails/V4?wsdl=IGetAuthorizationDetails.wsdl在您的浏览器中,它包含什么?里面有你的类型和参考号吗?

最后,我将尝试在定义web服务及其所有组件元素时只使用一个XML名称空间。现在,我看到两个名称空间:

http://request.message.provider.acp.com/
http://v4.ws.provider.acp.com/

... CXF分两部分创建WSDL。使用一个名称空间应该提供一个完整的WSDL,不需要导入,只需要使用一个URL。另请参见:CXF自动生成WSDL导入本身?

 类似资料:
  • 问题内容: 我得到了以下XML结构: 注意,节点已经 (由文本和XML组成) ,这是关于节点的部分 : 此时一切正常,输出有关以下内容的此类: 然后,通过上面的内容,我可以解决以下元素: 但问题是,我不能找到一种方法,或者将文本从上面的例子。 这是我尝试过的,但是不起作用: 使用的属性如下: (我认为XJC忽略了最后一个属性) 但是我不确定这是否是解决问题的方法。答案之一表示这是一个错误,而另一答

  • 我们有个人课。Person类具有类型为PersonDetail的属性。Persondeail有一个类型为Mail类的属性。 当我们启动应用程序并导航到swagger ui html页面时,邮件类不会在openapi定义的组件部分生成,我们会在页面上出现“无法解析引用:无法解析指针:文档中不存在 /components/schemas/Mail”错误。正如我们检查的,如果有一个复杂的类型在第三级,时

  • 在GlassFish Server开源版本3.1中部署。1(构建12): 引起原因:java.security.PrivilegedActionExcema:com.sun.xml.bind.v2.runtime.IllegalAnnotationsExceptions: 1个IllegalAnnotationExceptions的计数没有ObjectFactory与@XmlElementDecl

  • 我需要在SE环境中使用没有CDI容器的Jersey 2.28(带Jetty)。我的所有设置都在web.xml中: 以下是我使用的依赖项: 我得到的是: 我知道Jersey可以与不同的DI容器一起使用,例如Weld、HK2等,但是否可以不使用DI容器?如果是,那又是怎样做的呢?

  • 问题内容: 在进行了整个“企业”编程一段时间之后,我对语言本身感到非常失望,如果不得不回到它上面,总是会感到很受阻。您平均的Android应用程序的项目规模并不太令人生畏,并且库的编码风格实际上非常不错,但是如果我可以避免使用Java,我肯定会这样做。 这就是问题:我可以避免吗?尽管有很多JVM语言可以在台式机和服务器上选择,但是Dalvik VM和设备本身存在一些限制。使用JIT在2.2中似乎更

  • 问题内容: 由于用户可以在浏览器中禁用JavaScript,所以我想知道是否有任何开发使用Ajax但不使用Javascript的应用程序的方法,因此即使禁用了Javascript仍可以正常工作。有什么限制吗? 问题答案: 没有Javascript,AJAX是不可能的,因为它以客户端上运行的JS代码为前提。如果禁用了JS,则浏览器中无法执行任何操作并无法与服务器联系- 只有“死”的HTML和CSS。