9

Weblogic 10.3.3 で使用されている JAX-WS バージョンの更新に成功した人はいますか?

ここからの受け入れられた回答に記載されていることを何時間も運が悪いことでやろうとしてきました。

Maven を使用して依存関係を解決しています。WAR モジュール (Web サービス プロジェクト) で次のライブラリの組み合わせを試しました。

    <dependency>
        <groupId>javax.xml.ws</groupId>
        <artifactId>jaxws-api</artifactId>
        <version>2.2.8</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.2.7</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.jws</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.metro</groupId>
        <artifactId>wsit-api</artifactId>
        <version>2.2.1-1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.metro</groupId>
        <artifactId>wsit-impl</artifactId>
        <version>2.2.1-1</version>
    </dependency>

それは基本的に、新しいバージョンの JAX-WS をアプリケーションと共に出荷することです。

私の EAR モジュールでは、weblogic-application.xmlさまざまなパッケージをオーバーライドするファイルを試しました。

    <package-name>javax.jws.*</package-name>
    <package-name>javax.xml.ws.*</package-name>
    <package-name>javax.xml.bind.*</package-name>
    <package-name>javax.xml.soap.*</package-name>
    <package-name>com.sun.xml.*</package-name>

これは、Weblogic がそれ自体のクラスではなく、私のクラスを使用することを示すためです。

現在、Weblogic 10.3.3 は JAX-WS 2.1.5 を使用しており、Web サービスをデプロイすると wsdl ファイルが動的に生成されます。生成された wsdl は xsds (スキーマ) をインポートしており、インラインで wsdl を生成するように Weblogic に指示したいと思います。そのため、より新しいバージョンがインライン スキーマを使用することを期待して、使用されている JAX-WS バージョンをオーバーライドしようとしています。

別のオプションは、開発中にインライン スキーマを使用して wsdl を生成し、Weblogic に動的バージョンを生成する代わりにそれを使用するように指示することです。その方法を知っている人はいますか? WARの特定のパスに配置していますか?@WebService アノテーションの wsdlLocation 属性はどうですか?

前もって感謝します!

4

2 に答える 2

7

Weblogic 10.3.5 で JaxWs 2.2.6 を実行することができました。10.3.3 で作業していることは知っていますが、このソリューションも機能するはずです。

この METRO ディスカッションの手順に従いました: http://www.java.net/node/695058#comment-772902

そこからのすべての手順が実際に必要なわけではありません。だからここに私がやったことの説明があります。

war ファイルの手順

1) Web サービスを war ファイルとしてパッケージ化する

2) war ファイルでは、WEB-INF ディレクトリの下に sun-jaxws.xml ファイルが必要です (詳細については、こちらを参照してください: http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/jaxws/jaxws-war.html)

3) wsdl および xsd ファイルを WEB-INF/wsdl の下に配置します。

4)登録WSServletWSServletContextListenerてくださいweb.xml
(ヘルプについては、ここを参照してくださいhttp://java.dzone.com/articles/jax-ws-deployment-five-minute

<listener>
  <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
  <servlet-name>MyWebService</servlet-name>
  <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
  <load-on-startup>1</load-on-startup> 
</servlet>

<servlet-mapping>
  <servlet-name>MyWebService</servlet-name>
  <url-pattern>/MyWebService</url-pattern>
</servlet-mapping>

5) 少なくとも 1 つのサービス ファイルを以下に配置します。WEB-INF/classes/META-INF/services

ファイル内のコンテンツとして使用javax.xml.ws.spi.Provider
しました (プロバイダーの impl クラス):com.sun.xml.ws.spi.ProviderImpl
このファイルは jaxws-rt.jar から取得できます。
他のサービス ファイルもここに配置します (たとえば、別の XeceresParserFactory 用)。

reason : Weblogic は、実行時に次のファイルを生成します: _wl_cls_gen.jar。ここでは、最初にサービス ファイルを探します。weblogic がサービス ファイルを見つけると、他のすべてのファイルが jar ファイルから読み込まれます。少なくともこのように動作します

6) falseのweblogic.xml セットを作成する<prefer-web-inf-classes>false</prefer-web-inf-classes>

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd      http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.2/weblogic-web-app.xsd">
  <context-root>/LogisticsWebservice</context-root>
  <container-descriptor>
    <prefer-web-inf-classes>false</prefer-web-inf-classes>        
  </container-descriptor>
</weblogic-web-app>

war ファイルの構造:

WEB-INF
|-> classes
    |-> META-INF
        |-> services
            |-> javax.xml.ws.spi.Provider
|-> lib
    |-> alle projektspezifischen jars außer die Abhängigkeiten für JaxWS
|-> wsdl
    |-> MyWebService.wsdl
    |-> MyObjects.xsd
|-> sun-jaxws.xml
|-> web.xml
|-> weblogic.xml

耳やすりの手順

1) war ファイルを ear ファイルにパックする

2) JaxWs Service Finder クラスを下に配置しAPP-INF/classes ます。JaxWs-rt.jar の既存のクラス ファイルを使用できます。

3) jaxws-rt、すべての依存関係、および xerces-2.9.1 と xalan-2.7.1 を以下に配置します。APP-INF/lib

4)application.xmlファイルを作成する

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
<application>
  <display-name>MyWebService</display-name>
  <module id="MyWebService">
    <web>
      <web-uri>MyWebService.war</web-uri>
      <context-root>/MyWebService</context-root>
    </web>
  </module>
</application>

5)weblogic-application.xmlファイルを作成する

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://xmlns.oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.2/weblogic-application.xsd">

  <application-param>
    <param-name>webapp.encoding.default</param-name>
    <param-value>UTF-8</param-value>  
  </application-param>

  <prefer-application-packages>
    <package-name>com.ctc.*</package-name>
    <package-name>com.sun.xml.*</package-name>
    <package-name>com.sun.istack.*</package-name>
    <package-name>com.sun.msv.datatype.*</package-name>
    <package-name>com.sun.msv.driver.*</package-name>
    <package-name>com.sun.msv.grammar.*</package-name>
    <package-name>com.sun.msv.reader.*</package-name>
    <package-name>com.sun.msv.relaxns.*</package-name>
    <package-name>com.sun.msv.scanner.*</package-name>
    <package-name>com.sun.msv.util.*</package-name>
    <package-name>com.sun.msv.verifier.*</package-name>
    <package-name>com.sun.msv.writer.*</package-name>
    <package-name>com.sun.org.apache.xml.internal.*</package-name>
    <package-name>com.sun.wsit.*</package-name>
    <package-name>javax.jws.*</package-name>
    <package-name>javax.xml.bind.*</package-name>
    <package-name>javax.xml.soap.*</package-name>
    <package-name>javax.xml.stream.*</package-name>
    <package-name>javax.xml.ws.*</package-name>
    <package-name>javax.xml.activation.*</package-name>
    <package-name>javax.xml.annotation.*</package-name>
    <package-name>javax.xml.mail.*</package-name>
    <package-name>javax.xml.security.*</package-name>
    <package-name>javax.xml.registry.*</package-name>
    <package-name>javax.xml.rpc.*</package-name>
    <package-name>javax.xml.crypto.*</package-name>
    <package-name>org.apache.xerces.*</package-name>
    <package-name>javanet.staxutils.*</package-name>
    <package-name>jp.gr.xml.*</package-name>
    <package-name>org.codehaus.stax2.*</package-name>
    <package-name>org.glassfish.gmbal.*</package-name>
    <package-name>org.iso_relax.*</package-name>
    <package-name>org.jcp.xml.dsig.*</package-name>
    <package-name>org.jvnet.*</package-name>
    <package-name>org.relaxng.*</package-name>

  </prefer-application-packages>

  <prefer-application-resources>
    <resource-name>META-INF/services/*</resource-name>
  </prefer-application-resources>
</weblogic-application>    

注意: ear ファイルの下にある jar ファイルは、APP-INF/lib下の war ファイルにあるべきではありませんWEB-INF/lib

ear ファイルの構造:

|-> APP-INF
    |-> classes
        |-> com
            |-> sun
                |-> xml
                    |-> ws
                        |-> util
                            |-> ServiceFinder.class
                            |-> ServiceFinder$1.class
                            |-> ServiceFinder$ComponentExWrapper.class
                            |-> ServiceFinder$CompositeIterator.class
                            |-> ServiceFinder$LazyIterator.class
    |-> lib
        |-> activation-1.1.jar
        |-> gmbal-api-only-3.1.0-b001.jar
        |-> ha-api-3.1.8.jar
        |-> istack-commons-runtime-2.4.jar
        |-> javax.annotation-3.1.1.jar
        |-> jaxb-api-2.2.4.jar
        |-> jaxb-impl-2.2.5.jar
        |-> jaxws-api-2.2.8.jar
        |-> jaxws-rt-2.2.6.jar
        |-> jsr181-api-1.0-MR1.jar
        |-> management-api-3.0.0-b012.jar
        |-> mimepull-1.8.jar
        |-> policy-2.3.1.jar
        |-> relaxngDatatype-20020414.jar
        |-> resolver-20050927.jar
        |-> saaj-api-1.3.4.jar
        |-> saaj-impl-1.3.18.jar
        |-> serializer-2.7.1.jar
        |-> stax-api-1.0-2.jar
        |-> stax-ex-1.7.jar
        |-> stax2-api-3.1.1.jar
        |-> streambuffer-1.4.jar
        |-> txw2-20110809.jar
        |-> woodstox-core-asl-4.1.2.jar
        |-> xalan-2.7.1.jar
        |-> xercesImpl-2.9.1.jar
        |-> xml-apis-1.3.04.jar
|-> META-INF
    |-> application.xml
    |-> weblogic-application.xml
|-> MyWebService.war

ear ファイルを weblogic にデプロイします。

wsdl ファイルを開くと、次のhttp://localhost:7001/MyWebService/MyWebService?wsdlコメントが表示されます。

<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.6b21  svn-revision#12959. -->

このハウツーが何らかの形で役立つことを願っています。

いくつかのデバッグ情報について、これを ServiceImpl クラスに追加しました。

private static String getImplementationInfo(String componentName, @SuppressWarnings("rawtypes") Class componentClass)
{
  CodeSource source = componentClass.getProtectionDomain().getCodeSource();
  return MessageFormat.format(
      "{0} implementation: {1} loaded from: {2}",
      componentName,
      componentClass.getName(),
      source == null ? "Java Runtime" : source.getLocation());
}


public MyWebServiceResponse sayHello(MyWebServiceRequest request) throws MyWebServiceFault
  if (LOG.isDebugEnabled())
  {
    com.sun.xml.ws.util.Version jaxwsVersion = com.sun.xml.ws.util.Version.RUNTIME_VERSION;
    LOG.debug("JaxWS major=" + jaxwsVersion.MAJOR_VERSION + "; buildVersion=" + jaxwsVersion.BUILD_VERSION + "; buildId="
        + jaxwsVersion.BUILD_ID + "; svnRev" + jaxwsVersion.SVN_REVISION);
    LOG.debug(getImplementationInfo("JaxWS", com.sun.xml.ws.util.Version.class));
    LOG.debug(getImplementationInfo("JaxB", com.sun.xml.bind.Util.class));
    LOG.debug(getImplementationInfo("DocumentBuilderFactory", DocumentBuilderFactory.newInstance().getClass()));
    LOG.debug(getImplementationInfo("XPathFactory", XPathFactory.newInstance().getClass()));
    LOG.debug(getImplementationInfo("TransformerFactory", TransformerFactory.newInstance().getClass()));
    LOG.debug(getImplementationInfo("SAXParserFactory", SAXParserFactory.newInstance().getClass()));
  }

  // do something

  return myWebServiceResponse;
}

よろしくアレックス

PS: 新しいユーザーとして、私は 2 つのハイパーリンクしか投稿できません。申し訳ありません...

于 2012-11-09T11:59:29.390 に答える
2

私はこのソリューションを使用し、これを機能させることができました...しかし、問題は、適切なクライアント証明書を送信する必要があるため、バインディングに割り当てたカスタム SSLSocketFactory を作成したことです: bp.getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY 、fact.getSSLSocketFactory());

問題は、weblogic がそれを使用していないことです。標準のファクトリで独自の HTTPSConnection を使用します。私は weblogic SSLSocketFactory を実装しようとしましたが、バインディングへの配置は、それが太陽クラスではないことを正当に訴えます。

多くの時間を無駄にした後、(コードをスタンドアロンとして実行して) 呼び出しのテンプレートを作成し、XML を使用してノードを置換/更新します (+ http ヘッダーのアクション)。それはうまく機能し、必要なすべての変更を取り除きました。少し急進的であることは承知していますが、正直なところ、呼び出しを実装するのは非常にうまく機能します。

于 2013-08-13T13:55:15.997 に答える