17

Java でいくつかの大きなファイル (DB エクスポート) を作成していますが、それらを SharePoint サーバーのどこかに配置する必要があります。現在、IE でこれを行っていますが、このステップも自動化したいと考えています。

Web を検索したところ、SOAP を使用するためのヒントがいくつか見つかりましたが、これらすべての根拠はまだわかりません。誰かが私がする必要があるサンプルコードまたはレシピを提供できますか?

注意: SharePoint サーバーは NT ドメイン認証を要求します。Firefoxでもログインできません:(

編集

  • IE の恐ろしい URL を WebDAV パスに変換するにはどうすればよいですか?
  • コードで本番システムを台無しにする前に使用できる WebDAV「エクスプローラー」はありますか? http://www.davexplorer.org/から「DAV Explorer 0.91」を試しましたが、接続できません (おそらく NT ドメイン認証のため)。
4

6 に答える 6

7

Sacha の提案に加えて、SharePoint SOAP Web サービスを使用できます。各 SharePoint サイトは、パスを介して一連の Web サービスを公開しますhttp://<Site>/_vti_bin/

あなたの場合、おそらくLists Web サービス( http://<Site>/_vti_bin/Lists.asmx) が必要です。から WSDL を取得できますhttp://<Site>/_vti_bin/Lists.asmx?WSDL。WSS 3.0 SDK には、Web サービスの使用方法に関する詳細が含まれています (おそらくUpdateListItemsおよびAddAttachmentメソッドを使用することをお勧めします)。

とはいえ、NTLM の問題を回避できると仮定すると、Sacha の最初のオプション (ドキュメント ライブラリをドライブにマップする) がおそらく最も簡単な方法です。

Windows を使用している場合は、ドキュメント ライブラリの UNC パスに移動するだけです。たとえば、ドキュメント ライブラリのブラウザー URL が次の場合:

http://<Site>/Foo/BarDocs/Forms/AllItems.aspx

対応する UNC パスを Windows エクスプローラーのアドレス バーに入力するだけです。

\\<Site>\Foo\BarDocs

ファイルをこの場所にドラッグ アンド ドロップします。必要に応じて、Windows エクスプローラーまたは SUBST.EXE コマンド ライン ユーティリティを使用して、この場所をドライブ文字にマップできます。

于 2008-11-24T15:29:35.777 に答える
6

わかりました...数時間の作業と、MicroSoft が提供する「ドキュメント」とすべてのヒントを熟読した後、すべてのヒントがランダムにネット上に広がった後、SharePoint サーバーのコンテンツを閲覧するためのサンプル コードを書くことができました。 Axis2 のフォルダー

次の目的地: 何かをアップロードします。

于 2008-11-26T14:56:47.480 に答える
3

もう 1 つの解決策は、HTTP PUT メソッドを使用してファイルを SharePoint に直接送信することです。

そのために、Apache HTTP クライアントを使用できます。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.2.3</version>
</dependency>

また、NTLMv2 認証を許可するには、 JCIFライブラリが必要です。

<dependency>
   <groupId>jcifs</groupId>
   <artifactId>jcifs</artifactId>
   <version>1.3.17</version>
</dependency>

最初に、Apache HTTP クライアントが NTLMv2 サポートのために JCIF を使用できるようにするためのラッパーを作成する必要があります。

public final class JCIFSEngine implements NTLMEngine {

    private static final int TYPE_1_FLAGS =
            NtlmFlags.NTLMSSP_NEGOTIATE_56
            | NtlmFlags.NTLMSSP_NEGOTIATE_128
            | NtlmFlags.NTLMSSP_NEGOTIATE_NTLM2
            | NtlmFlags.NTLMSSP_NEGOTIATE_ALWAYS_SIGN
            | NtlmFlags.NTLMSSP_REQUEST_TARGET;

    @Override
    public String generateType1Msg(final String domain, final String workstation)
            throws NTLMEngineException {
        final Type1Message type1Message = new Type1Message(TYPE_1_FLAGS, domain, workstation);
        return Base64.encode(type1Message.toByteArray());
    }

    @Override
    public String generateType3Msg(final String username, final String password,
            final String domain, final String workstation, final String challenge)
            throws NTLMEngineException {
        Type2Message type2Message;
        try {
            type2Message = new Type2Message(Base64.decode(challenge));
        } catch (final IOException exception) {
            throw new NTLMEngineException("Invalid NTLM type 2 message", exception);
        }
        final int type2Flags = type2Message.getFlags();
        final int type3Flags = type2Flags
                & (0xffffffff ^ (NtlmFlags.NTLMSSP_TARGET_TYPE_DOMAIN | NtlmFlags.NTLMSSP_TARGET_TYPE_SERVER));
        final Type3Message type3Message = new Type3Message(type2Message, password, domain,
                username, workstation, type3Flags);
        return Base64.encode(type3Message.toByteArray());
    }
}

参照

認証付きの HTTP PUT を実行するためのメイン コード:

    try {

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        DefaultHttpClient httpclient = new DefaultHttpClient(params);

        //Register JCIF NTLMv2 to manage ntlm auth.
        httpclient.getAuthSchemes().register("ntlm", new AuthSchemeFactory() {
            @Override
            public AuthScheme newInstance(HttpParams hp) {
                return new NTLMScheme(new JCIFSEngine());
            }
        });

        //Provide login/password
        httpclient.getCredentialsProvider().setCredentials(
                AuthScope.ANY,
                new NTCredentials([LOGIN], [PASSWORD], "", [DOMAIN]));
        //Create HTTP PUT Request       
        HttpPut request = new HttpPut("http://[server]/[site]/[folder]/[fileName]");
        request.setEntity(new FileEntity([File]));            

        return httpclient.execute(request);

    } catch (IOException ex) {
      //...
    }
于 2013-04-24T09:51:00.587 に答える
2

さまざまなオプションを考えることができます:

  • ドキュメント ライブラリをファイル ドライブにマッピングし、他のファイルと同じようにファイル システムにファイルを保存します。
  • HTTP WebDAV プロトコルを使用します。

...そして NTLM 認証部分の場合:

http://www.luigidragon.com/networking/ntlm.html

于 2008-11-24T14:30:42.323 に答える