3

src/wsdlの下にwsdlファイルがあり、次のようにこのwsdlファイル内のプロパティファイルから値を読み取ることができるかどうか疑問に思っていました:

<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3-b02-. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3-b02-. --><definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://AXLInterface.jaxws.AllInOne.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://AXLInterface.jaxws.AllInOne.org/" name="AXLInterfaceService">
<types>
<xsd:schema>
<xsd:import namespace="http://AXLInterface.jaxws.AllInOne.org/" schemaLocation="${wsdl.url}/AXLInterface?xsd=1"></xsd:import>
</xsd:schema>

</definitions>

私は次のように applicationContext で定義されたPropertyPlaceholderConfigurerを持っています:

<bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:messages/application.properties</value>
                <value>file:${APP_HOME}/Common/Conf/app.properties
                </value>
            </list>
        </property>

        <property name="ignoreResourceNotFound" value="true" />
        <property name="searchSystemEnvironment" value="true" />
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    </bean>

アプリケーションをコンパイルしようとすると、wsdl ファイルでエラーが発生しました。

[ERROR] Unable to parse "${wsdl.url}/AXLInterface?xsd=1" : Illegal character in path at index 1: ${wsdl.url}/AXLInterface?xsd=1

[ERROR] java.net.URISyntaxException: Illegal character in path at index 1: ${wsdl.url}/AXLInterface?xsd=1

それを達成する方法を教えてください、ありがとう。

4

3 に答える 3

3

WSDLファイルをリソースとして定義するだけで、Mavenがそれを強化します。ただし、プロパティ値は、プロパティファイルではなく、Mavenプロファイルに含める必要があります。

<resource>
    <directory>src/wsdl</directory>
    <filtering>true</filtering>
</resource>
于 2012-12-12T13:40:23.063 に答える
0

これは、MessageDispatchServlet を使用していることを前提としています。

web.xml で以下を使用します。ここで重要な部分は、transformWsdlLocation と wsdlDefinitionHandlerAdapterBeanName です。TransformWsdlLocation は、Spring ws 2.1.2 の一部として最近変更され、schemaLocation も変更されました。 https://jira.springsource.org/browse/SWS-791

<servlet>
    <servlet-name>spring-ws</servlet-name>
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
    <init-param>
        <param-name>transformWsdlLocations</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
       <param-name>wsdlDefinitionHandlerAdapterBeanName</param-name>
       <param-value>myWsdlDefinitionHandlerAdapter</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

次に、spring-ws-servlet.xml 構成ファイルで、myWsdlDefinitionHandlerAdapter という名前の Bean を指定します。プロパティ ファイルまたは必要な場所から取得できる値。

次は、Spring WsdlDefinitionHandlerAdapter を拡張するクラス MyWsdlDefinitionHandlerAdapter です。私の例では、サーバーの場所を変更して wsdl の場所を変更しています。

public class MyWsdlDefinitionHandlerAdapter extends WsdlDefinitionHandlerAdapter {

private String serverAlias;

@Override
protected String transformLocation(String location, HttpServletRequest request) {
    if(StringUtils.hasText(getServerAlias())){
        StringBuilder url = new StringBuilder(request.getScheme());
        url.append("://").append(getServerAlias());
        if (location.startsWith("/")) {
            // a relative path, prepend the context path
            url.append(request.getContextPath()).append(location);
            return url.toString();
        }
        else {
            int idx = location.indexOf("://");
            if (idx != -1) {
                // a full url
                idx = location.indexOf('/', idx + 3);
                if (idx != -1) {
                    String path = location.substring(idx);
                    url.append(path);
                    return url.toString();
                }
            }
        }
    } else {
        return super.transformLocation(location, request);
    }

    // unknown location, return the original
    return location;
}

public String getServerAlias() {
    return serverAlias;
}

public void setServerAlias(String serverAlias) {
    this.serverAlias = serverAlias;
}
}

お役に立てれば。

于 2012-12-18T22:26:01.697 に答える
0

war プラグインのフィルタリングを有効にする必要があります。

<plugin>
   <artifactId>maven-war-plugin</artifactId>
   <version>2.1.1</version>
   <configuration>
      <webResources>
         <resource>
            <directory>src/wsdl</directory>
            <filtering>true</filtering>
         </resource>
      </webResources>
      ...

その後、おそらく Maven プロジェクトの構成を更新する必要があります。

ここに画像の説明を入力

于 2012-12-23T20:21:48.183 に答える